我知道 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
看: