如何将OOM杀死的进程关联至对应Docker容器?
嘿,我来帮你搞定这个问题!当内核日志里出现OOM杀死进程的记录,要找到对应的Docker容器其实不难,给你几个实用的方法:
第一步:先提取日志里的关键信息
从你的kern.log里,先记下被杀死的进程PID(比如你这里的7996或9637),另外日志里已经给出了线索:cpuset=docker-84650dafae24a54b7e0f98571ee18585495f73a8...,这里的一串字符就是目标容器的完整ID。方法一:通过进程PID直接查容器(如果进程还存在的话)
执行以下命令,替换<PID>为实际的进程号:cat /proc/<PID>/cgroup输出结果里会包含类似
docker-<容器ID>.scope的条目,其中<容器ID>就是你要找的容器标识。比如输出可能是:12:cpuset:/docker/84650dafae24a54b7e0f98571ee18585495f73a8
方法二:用容器ID确认容器详情
拿到容器ID后,不管是从cgroup还是日志里提取的,都可以用docker ps命令查看容器的具体信息:# 用完整ID查询 docker ps -a --filter "id=84650dafae24a54b7e0f98571ee18585495f73a8" # 或者用短ID(前12位)更方便 docker ps -a --filter "id=84650dafae24"这个命令会返回容器的名称、使用的镜像、状态等信息,帮你快速定位是哪个容器出了问题。
方法三:直接从OOM日志提取容器ID
像你日志里已经显示了cpuset=docker-<容器ID>的字段,直接把这串ID复制出来,用上面的docker ps命令查询就行——毕竟进程已经被OOM杀死,/proc/<PID>目录可能已经不存在了。
另外提醒一下,如果你的Docker版本比较新,cgroup的路径格式可能会略有不同,但核心逻辑都是找包含docker和容器ID的条目,一找一个准!
备注:内容来源于stack exchange,提问作者daNutz

