统计任务跑到第二十八分钟进程直接消失 日志停在中间没有任何异常 退出码是 137 换成小数据量一次都没复现。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
dmesg -T | grep -i -E 'oom|killed process' journalctl -k | grep -i oom nohup python /opt/jobs/report.py >/var/log/rpt.log 2>&1 &
137 是 128 加 9 说明进程收到 SIGKILL 常见于容器内存超限被内核杀掉 也可能是外层调度或者会话断开后的超时清理 看起来像程序自己崩了。这一点先确认清楚,后面就不用反复试。
「长任务被信号杀掉」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
具体做法是,先在 dmesg 和容器事件里找 oom 记录 确认到底是不是内存不够;把任务放进 systemd 或者 nohup 里跑 别一直挂在前台的会话窗口上;内存确实不够就改成分批处理 把单批峰值压下来。
改完照着核一遍,同样数据量重跑能跑完 内核日志里没有 oom 记录 退出码也正常回到 0。
