报错是这么冒出来的。服务状态里每隔几十秒就重启一次,退出原因写着信号九,应用日志里没有任何异常堆栈和错误输出。
原因不止一个,得分开看。内存超限被内核直接杀掉。还有一种是启动耗时超过超时设置,被服务管理器强制终止。
不容易想到的是,进程自己触发看门狗超时。
先看退出码和信号
systemctl show app -p ExecMainStatus,ExecMainCode
然后核对内核是否发生过 OOM
dmesg -T | grep -i 'killed process'
延长启动超时时间
systemctl edit app
末了确认看门狗配置
grep -i watchdog /etc/systemd/system/app.service
中途换过一次思路,把范围缩到最小的那一层,反而快了。
恢复的判定其实很直接。服务稳定运行,启动日志里不再出现被信号终止的记录。
提醒一点。反复重启会把日志刷满,先停服务再排查,把自动重启暂时关掉观察真实退出码;重启策略设得太激进反而会掩盖失败原因,让人误以为是应用自己崩了。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。