当前位置: 首页 > news >正文

Supervisor exit status 143

文章目录

  • 服务器没有重启,Java服务为什么自动重启?一次Ubuntu自动更新导致Supervisor服务重启的排查实录
  • 故障背景
  • 故障现象
  • exit status 143是什么意思?
    • SIGTERM和SIGKILL区别
  • 排查Supervisor是否异常
  • 继续追查是谁触发systemd停止服务
  • 定位Ubuntu自动更新任务
  • 完整故障链路分析
  • 为什么升级glibc会影响业务服务?
  • 这次问题为什么不容易发现?
    • 服务器没有重启
    • Java没有崩溃
    • Supervisor没有故障
  • 生产环境优化建议
    • 生产服务器关闭自动升级
    • 设置统一维护窗口
    • 完善服务监控
  • 总结

服务器没有重启,Java服务为什么自动重启?一次Ubuntu自动更新导致Supervisor服务重启的排查实录

故障背景

在生产环境运维过程中,经常会遇到这样的问题:

服务器看起来一切正常,没有发生重启,但是业务服务突然出现短暂中断,然后自动恢复。

这类问题往往比较隐蔽。

如果只看应用日志,很容易误判为:

  • Java应用异常退出
  • JVM崩溃
  • Supervisor异常
  • 服务器故障

但实际生产环境中,还有一种情况容易被忽略:

Linux系统自动维护任务可能会间接影响业务服务。

本文记录一次真实生产环境问题排查过程:

Ubuntu服务器上的Java服务凌晨自动重启,通过Supervisor、systemd、apt日志逐层分析,最终定位到unattended-upgrades自动升级glibc组件导致systemd重新加载服务。


故障现象

业务反馈:

2026年5月20日 06:15左右,业务接口出现短暂异常。

查看服务器上的Supervisor日志:

tail-100/var/log/supervisor/supervisord.log

发现:

2026-05-20 06:15:58,750 INFO waiting for filebeat, server, server2 to die 2026-05-20 06:15:58,883 WARN received SIGTERM indicating exit request 2026-05-20 06:16:00,193 WARN stopped: server2 (exit status 143) 2026-05-20 06:16:02,958 WARN stopped: server (exit status 143) 2026-05-20 06:16:03,983 INFO stopped: filebeat (exit status 0)

从日志来看:

  • server停止
  • server2停止
  • filebeat停止
  • 随后服务重新启动

初步判断:

业务进程不是崩溃,而是被主动停止。


图片说明:

Supervisor收到SIGTERM信号,Java服务退出状态为143。


exit status 143是什么意思?

很多运维人员看到:

exit status 143

第一反应:

服务异常退出?

实际上并不是。

Linux进程退出码规则:

退出码 = 128 + 信号编号

其中:

SIGTERM信号编号:

15

所以:

128 + 15 = 143

因此:

exit status 143

表示:

进程收到SIGTERM信号,并进行了正常退出。

也就是说:

这不是:

kill-9PID

强制杀死。

而是:

kill-15PID

优雅终止。


SIGTERM和SIGKILL区别

信号编号说明
SIGTERM15请求程序优雅退出
SIGKILL9强制立即结束
SIGINT2Ctrl+C中断

生产环境中:

正常停止服务:

systemctl stop xxx

通常发送:

SIGTERM

给应用一个机会:

  • 保存数据
  • 关闭连接
  • 提交事务

排查Supervisor是否异常

查看Supervisor状态:

systemctl status supervisor

结果:

Active: active (running) Main PID: 917203 (supervisord) Active since: Tue 2026-05-20 06:16:04 UTC

发现:

Supervisor刚刚启动。

说明:

Supervisor不是一直运行。

它在:

06:16:04

重新启动。


继续查看systemd日志:

journalctl-usupervisor--since"2026-05-20 06:10:00"--until"2026-05-20 06:20:00"

发现:

May 20 06:15:58 systemd[1]: Stopping supervisor.service

关键点:

不是Supervisor自己退出。

而是:

systemd主动停止了Supervisor。


继续追查是谁触发systemd停止服务

继续查看系统日志:

journalctl\--since"2026-05-20 06:14:00"\--until"2026-05-20 06:17:00"

发现关键日志:

May 20 06:15:49 cbf systemd[1]: Reexecuting requested from client PID 916314 ('systemctl')

同时发现:

May 20 06:15:32 cbf systemd[1]: Starting apt-daily-upgrade.service

这里出现了重要线索:

apt-daily-upgrade.service

Ubuntu自动更新任务。


定位Ubuntu自动更新任务

Ubuntu默认开启:

unattended-upgrades

用于自动安装:

  • 安全补丁
  • 系统组件更新

查看日志:

cat/var/log/unattended-upgrades/unattended-upgrades.log

发现:

2026-05-20 06:15:33 INFO Starting unattended upgrades script 2026-05-20 06:15:45 INFO Packages that will be upgraded: libc-bin libc-dev-bin libc-devtools libc6 libc6-dev locales

最终确认:

此次自动升级内容:

libc6 libc-bin locales

其中:

libc6

就是Linux系统核心运行库:

glibc。


完整故障链路分析

最终整个过程如下:

Ubuntu unattended-upgrades | | 自动升级glibc(libc6) | | systemctl触发systemd reexec | | systemd重新加载服务 | | supervisor.service停止 | | 执行ExecStop: supervisorctl shutdown | | Supervisor发送SIGTERM | | Java服务退出 (exit status 143) | | supervisor重新启动 | | Java服务重新运行

为什么升级glibc会影响业务服务?

很多人可能会疑惑:

更新一个系统库,为什么会影响Java服务?

原因:

Linux应用运行时依赖系统基础库。

例如:

Java | JVM | 系统调用 | glibc | Linux Kernel

glibc属于Linux最核心的基础组件之一。

升级glibc后:

  • 新启动进程使用新版本
  • 老进程仍然使用旧内存映射
  • systemd可能执行重新加载

为了保证系统状态一致,部分服务可能被重新启动。


这次问题为什么不容易发现?

因为几个现象很容易误判。

服务器没有重启

执行:

uptime-s

发现服务器启动时间正常。

所以排除:

  • 服务器宕机
  • 云主机重启

Java没有崩溃

不是:

OutOfMemoryError

也不是:

JVM crash

而是:

SIGTERM

正常退出。


Supervisor没有故障

Supervisor只是被systemd要求停止。

属于:

被动退出

生产环境优化建议

生产服务器关闭自动升级

生产环境不建议:

每天自动升级系统组件

尤其是:

  • Java应用服务器
  • 数据库服务器
  • 中间件服务器

查看:

cat/etc/apt/apt.conf.d/20auto-upgrades

如果:

APT::Periodic::Unattended-Upgrade "1";

修改:

APT::Periodic::Unattended-Upgrade "0";

设置统一维护窗口

推荐:

开发环境: 自动更新 测试环境: 定期更新 生产环境: 人工审批 + 维护窗口

例如:

每周:

周六凌晨02:00-04:00

进行:

  • 系统补丁
  • 软件升级
  • 服务重启

完善服务监控

监控不要只关注:

服务器存活

还应该关注:

  • Java进程状态
  • Supervisor状态
  • HTTP接口
  • JVM指标
  • 服务启动时间

例如:

发现:

服务启动时间突然变化

即可提前发现重启事件。


总结

本次故障最终定位:

Ubuntu服务器开启了unattended-upgrades自动更新机制,在凌晨自动升级libc6等系统核心组件,触发systemd重新加载服务,导致Supervisor托管的Java服务收到SIGTERM信号并重新启动。

整个排查过程:

业务异常 ↓ Supervisor日志 ↓ exit status 143 ↓ 确认SIGTERM ↓ systemd日志 ↓ 发现服务停止来源 ↓ apt日志 ↓ 定位unattended-upgrades ↓ 确认glibc升级

这个案例说明:

生产环境出现服务重启时,不要只关注应用本身。

Linux系统层面的:

  • systemd
  • 自动更新
  • 定时任务
  • 云初始化
  • 系统维护任务

都有可能影响业务运行。

作为运维人员,需要建立:

从应用层 → 服务管理层 → 系统层 → 操作系统维护机制

的完整排查思路。

只有这样,才能快速定位真正原因。


http://www.jsqmd.com/news/1286614/

相关文章:

  • T5模型:统一框架下的NLP任务处理与优化实践
  • 淘宝闪购外卖券领取入口和路径,2026年7月淘宝闪购外卖券使用规则,每日大额红包领取方法,外卖优惠券叠加券神券口令分享 - 优企甄选
  • 【无功优化】配电网+电动汽车V2G+无功优化研究(Matlab代码实现)
  • 腾讯云Mall 2.0|AI原生商城智能经营平台:技术架构与实践价值
  • 千载盈亏谁数, 不过灶边朝暮。 米粒滚星河, 沸作一窗烟雨。 且住,且住, 碗底莲痕初露。 恒沙多少泡沤, 浮沉恰如朝露。 扶出共邻翁, 笑指老槐如故。 添否,添否, 明月清风热粥。
  • NBM5100A与PIC32MX795F512L在低功耗物联网设备中的协同设计
  • 安卓文件管理的利器,为什么比系统自带更好用?
  • PyTorch安装全攻略:从硬件兼容到环境配置,彻底解决CUDA版本冲突
  • 静磁场仿真并行计算与GPU加速实践
  • 深入解析以太网交换芯片ALE:端口镜像、链路聚合与VLAN的硬件实现
  • 从“救火队员”到“战略枢纽”:供应链跟单如何实现价值跃迁?
  • 3D打印成本三年内将显著下降:从原型验证到车间生产的拐点
  • TI低功耗RF协议栈选型指南:从SimpliciTI到Z-Stack实战解析
  • 终极指南:让旧款Mac免费安装最新macOS系统
  • AI公司融资困境与信息安全:从DeepSeek事件看技术团队风险管理
  • 低功耗物联网设备电池增强方案与优化策略
  • Windows驱动存储终极清理指南:5步释放5GB系统空间
  • 2026专业浴霸服务商:用心做好每台浴霸,温暖您的家
  • Spring AI中Token成本优化与结构化输出实践
  • NLP文本分块策略:原理、实践与优化技巧
  • AI产品增长策略年度复盘:SEO、内容营销与社区运营的投入产出分析
  • AI框架设计核心考量与主流技术选型指南
  • STM32双机串口通信实战:从硬件连接到自定义协议设计
  • 深入解析TSN/AVB增强型调度流量(EST)机制:从硬件原理到工程实践
  • AM64x/AM243x DDR防火墙配置实战:硬件级内存隔离与安全加固
  • TAPSO算法解析:三重存档机制优化粒子群性能
  • 基于Arduino的自动喂鱼器DIY:从硬件选型到代码实现全解析
  • LangGraph工作流编排技术解析与应用实践
  • 丙午年六月十六晨霞悟
  • 如何用开源工具实现40+平台直播自动录制:告别错过直播的终极指南