编辑

编辑

我知道 OOM 杀手会在 syslog 中保存有关 pid 的信息,但我还想收集 cmdline 和被杀死进程的所有者。

信息与调试和 ELK 指标相关,只有 PID 没有帮助。我找不到工具或简单的方法来做到这一点,

有什么聪明的主意吗?

答案1

echo 1 > /proc/sys/vm/oom_dump_tasks

这似乎是内核在内存不足错误时可以显示的最多信息。

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

允许在内核执行 OOM 终止时生成系统范围的任务转储(不包括内核线程),并包括 pid、uid、tgid、vm 大小、rss、nr_ptes、swapents、oom_score_adj 分数和名称等信息。这有助于确定 OOM 终止程序被调用的原因、识别导致该事件的恶意任务以及确定 OOM 终止程序为何选择它要终止的任务。

如果将其设置为零,则该信息将被抑制。在具有数千个任务的非常大的系统上,转储每个任务的内存状态信息可能是不可行的。当可能不需要信息时,此类系统不应被迫在 OOM 条件下遭受性能损失。

如果将其设置为非零,则只要 OOM 杀手实际终止占用内存的任务,就会显示此信息。

编辑

按照在哪里可以看到内核终止进程的列表?

流程会计可以在这方面提供帮助。

简单来说:

apt-get install acct

然后尝试以下命令:

lastcomm
sa

或者在 Ubuntu 上:

lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct

看:

相关内容