ser*_*eyz 8 linux linux-kernel oom-killer
是否可以在 OOM 杀手日志中查看完整的程序命令行参数?我现在在 /var/log/syslog 中看到的是
Memory cgroup out of memory: Kill process 29187 (beam.smp) score 998 or sacrifice child
Killed process 29302 (cpu_sup) total-vm:4300kB, anon-rss:76kB, file-rss:272kB
beam.smp invoked oom-killer: gfp_mask=0xd0, order=0, oom_score_adj=0
beam.smp cpuset=/ mems_allowed=0-3
Run Code Online (Sandbox Code Playgroud)
我的机器上有很多 beam.smp 进程,要找出被 OOM 杀手杀死的特定进程不是很方便。
echo 1 > /proc/sys/vm/oom_dump_tasks
Run Code Online (Sandbox Code Playgroud)
这似乎是内核在内存不足错误时可以显示的最大值。
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 杀手实际终止占用内存的任务,就会显示此信息。