在 Ubuntu(Linux)系统中,进程“被杀”通常有这几类原因,从最常见到较少见排列:
最常见原因。
当系统内存(包括 swap)耗尽时,Linux 的 OOM Killer 会选择一个“最该牺牲”的进程杀掉,以保系统不崩。
特征:
dmesg 或 /var/log/syslog 中有类似:Out of memory: Killed process 1234 (xxx)
排查:
dmesg | grep -i "killed process"
grep -i "oom" /var/log/syslog
free -h
解决:
MemoryMax、cgroup、ulimit)kill / pkill / kill -9 手动或脚本杀掉可能是:
kill排查:
history | grep kill
ps aux | grep 进程名
journalctl -u 服务名
如果是 systemd 服务:
可能原因:
Restart=no 且主进程退出TimeoutStartSec / TimeoutStopSec 超时MemoryMax / CPUQuota 触发systemctl stop 或 systemctl restart查看:
journalctl -u 服务名 -n 100
systemctl show 服务名 | grep -i kill
程序自身 bug 导致:
特征:
Segmentation fault (core dumped)
139排查:
dmesg | grep 进程名
ulimit -c unlimited
gdb 分析 core
常见信号:
SIGTERM (15):正常终止SIGHUP (1):终端关闭SIGABRT (6):assert 失败SIGPIPE (13):写已关闭管道排查:
echo $?
strace -e signal ./程序
如果你在:
可能原因:
查看:
docker inspect 容器
kubectl describe pod
请告诉我:
dmesg 报错我可以帮你精准判断是哪一种。