我试图找出哪个特定的 Python 进程或可执行文件被 Linux OOM 杀手杀死。
在 /var/log/messages 中我得到这个:
Aug 18 03:19:11 169 kernel: [ 7747] 0 7748 3226957 2875051 5692 0 0 python
(注意它只是说 name =“python”)
和这个:
Aug 18 03:19:11 169 kernel: Killed process 7748 (python) total-vm:12907828kB, anon-rss:11500204kB, file-rss:0kB
(再次注意它只是说进程是“python”)
理想情况下,该进程的日志文件应在某处包含 PID。但是假设日志已包装(或者假设进程没有在任何地方记录 PID)。
Linux 是否提供了一种方法来找出进程执行的完整命令?如果能配置 Linux 的 OOM Killer 在进程表中显示全名就好了,比如:
/usr/bin/python /usr/lib/python2.7/site-packages/foo.pyc
或者也许在 OOM 错误发生时,Linux 在某个地方存储了一些进程详细信息?即将进程从 /proc 复制到 X? (妄想)
笔记:
这个问题与这个问题非常相似:https://stackoverflow.com/questions/624857/finding-which-process-was-killed-by-linux-oom-killer
但它没有达到我想要弄清楚的目的。
答案1
Linux 不支持在 OOM Killer 即将杀死进程或已经杀死进程时查询此类信息。
如果需要,您可以持续监控系统并使用时间戳和 PID 以及完整的命令行记录每个进程。看https://stackoverflow.com/a/8255487/334451示例实现。
因为您无法事先知道将来哪个进程将被杀死,所以您必须存储所有进程的信息并保留该信息,直到进程因 OOM Killer 杀死之外的原因而停止为止。