如何为内存不足创建内存转储。
如果系统内存不足,则 oom-killer 通过一些计算杀死占用最高内存的进程。
我们如何获得被杀死进程的核心转储
答案1
即使您的内核配置为生成核心转储,OOM 杀手也不会导致生成核心转储,因为它会发送 SIGKILL。
如中所述信号的手册页 (7)、SIGKILL 不会产生核心转储。
因此,改变这种行为的唯一方法需要对内核进行自定义补丁。
答案2
Configured vm.panic_on_oom=2 in /etc/sysctl.conf, which solves my problem.
**
- 恐慌
**
这会启用或禁用内存不足功能的恐慌。
如果设置为 0,内核将杀死一些恶意进程,称为 oom_killer。通常,oom_killer 可以杀死恶意进程,系统将继续存在。
如果将此设置为 1,则当发生内存不足时内核会发生恐慌。然而,如果某个进程通过mempolicy/cpusets限制使用节点,并且这些节点变成内存耗尽状态,则该进程可能会被oom-killer杀死。在这种情况下不会发生恐慌。因为其他节点的内存可能是空闲的。这意味着系统总体状态可能还不是致命的。
如果设置为 2,即使出现上述情况,内核也会强制发生恐慌。即使在内存cgroup下发生oom,整个系统也会panic。
默认值为0。1和2用于集群故障转移。请根据您的故障转移策略进行选择。 panic_on_oom=2+kdump 为您提供了非常强大的工具来调查 oom 发生的原因。您可以获得快照。