You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu18.04 Docker容器Python进程被杀的系统kill信号日志查询方法

资源超限进程被杀的默认日志记录情况

Linux内核以及Docker层面默认会记录内存超限触发的OOM kill事件,其他资源(CPU、磁盘IO、文件句柄等)超限默认不会主动杀死进程,也不会默认生成kill事件日志。

内存超限(OOM)事件查询方法

内存超限是容器进程被强制杀死的最高频原因,且被内核杀死的进程不会输出任何stderr日志,和你当前docker logs无相关输出的表现完全吻合,可通过以下路径查询默认记录:

  • 查内核日志缓冲区:执行dmesg | grep -i 'killed process',输出会明确标注被杀死进程的PID、进程名、内存占用量,以及所属的cgroup路径(可以对应到具体Docker容器ID)。
  • 查系统syslog归档:Ubuntu 18.04默认会把内核日志写入syslog,执行grep -i 'oom-killer' /var/log/syslog,重启过的系统可查/var/log/syslog.1等历史归档文件。
  • 查Docker daemon日志:如果是Docker配置的容器内存限制触发的OOM,可执行journalctl -u docker.service | grep -i 'oom',直接得到触发OOM的容器ID。
其他资源超限的日志配置方案

如果排查后确认不是OOM,需要手动配置日志采集规则来定位其他资源问题:

开启cgroup资源统计

修改Docker daemon配置文件/etc/docker/daemon.json,添加如下配置开启完整的cgroup资源统计:

{
  "cgroup-parent": "/docker",
  "exec-opts": ["native.cgroupdriver=cgroupfs"]
}

执行systemctl restart docker重启服务生效。

配置auditd记录进程 kill 事件

auditd可以记录所有进程被杀死的事件,方便溯源:

  1. 安装auditd:apt update && apt install -y auditd
  2. 添加监控规则:auditctl -a exit,always -F arch=b64 -S kill -S exit_group -k process_kill
  3. 后续查询事件:ausearch -k process_kill -i,可以看到进程退出的信号类型,SIGKILL(信号9)就是被强制杀死的事件,结合cgroup的资源占用记录就能对应到触发超限的资源类型。

容器资源打点配置

启动容器时添加健康检查参数,定时输出资源使用率到Docker日志,方便定位峰值:

docker run -d \
  --log-driver json-file --log-opt max-size=10m \
  --health-cmd "python3 -c 'import psutil; print(\"mem_usage:%s,cpu_usage:%s\" % (psutil.virtual_memory().percent, psutil.cpu_percent()))'" \
  --health-interval 10s \
  你的镜像名

后续直接执行docker logs ${container_id}就能看到间隔10秒的资源打点数据。

内容的提问来源于stack exchange,提问作者0-_-0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 15:24:01