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

如何获取被OOM杀死进程的PPID?Docker容器进程归属排查

如何定位OOM杀死的Docker进程所属容器及获取PPID

嘿,这个场景我再熟悉不过了——Docker环境下OOM杀了进程但找不到对应容器确实头疼,给你一步步来解决:

第一步:获取被杀死进程的PPID

如果进程还没被彻底清理(概率较低,但可以先试),直接用ps命令查询:

ps -o ppid= -p 165480

解释一下:-o ppid=指定只输出父进程ID(PPID),-p指定要查询的目标进程ID。

如果进程已经被销毁,ps查不到的话,就去系统日志里挖细节:

  • 查看/var/log/messages的更多上下文:
grep -A 15 -B 5 "165480" /var/log/messages

有时候内核会在OOM日志后面输出进程树的更多信息,里面可能包含PPID。

  • 或者用dmesg查看内核环缓存的OOM相关日志:
dmesg | grep -A 20 -B 5 "Out of memory: Kill process 165480"

第二步:关联PPID到Docker容器

拿到PPID后,我们可以通过三种方式找到对应的容器:

方式1:通过进程树反向查找

先查看PPID对应的进程信息:

ps -ef | grep <你的PPID>

Docker容器的入口进程的父进程通常是containerd-shim或者docker守护进程,你可以顺着进程树往上找,找到带有容器ID标识的进程,然后用容器ID查询容器详情:

docker inspect <容器ID>

方式2:遍历所有容器查找目标进程

如果不想手动捋进程树,直接遍历所有运行中的容器,检查哪个容器包含目标进程(即使进程已死,有些容器的进程历史可能还能查到,或者用PPID查询):

for container in $(docker ps -q); do
  echo "检查容器: $(docker inspect --format '{{.Name}}' $container) ($container)"
  docker top $container | grep -E "165480|<你的PPID>"
done

方式3:通过cgroup定位(最准确)

每个Docker容器的进程都属于专属的cgroup,如果进程还存在,查看它的cgroup信息:

cat /proc/165480/cgroup

输出里会有类似docker/abcdef123456...的路径,其中abcdef123456就是容器ID的前缀,直接用这个ID查容器:

docker ps -a | grep abcdef123456

如果进程已死,还是回到dmesg或/var/log/messages,有些内核版本会在OOM日志中输出进程所属的cgroup路径,直接提取容器ID即可。


内容的提问来源于stack exchange,提问作者workhardcc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:48:38