Answers:
要使您的内存管理看起来有些理智:
- 禁用OOM Killer(放入
vm.oom-kill = 0
/etc/sysctl.conf中)- 禁用内存过量使用(
vm.overcommit_memory = 2
输入/etc/sysctl.conf
)这些设置将使Linux以传统方式运行(如果某个进程所请求的内存多于可用内存
请注意,这是一个三进制值:malloc()
将失败,并且期望该内存的进程可以应对该失败)。
- 0 =“估计我们是否有足够的RAM”
- 1 =“总是说是”
- 2 =“如果我们没有记忆,请拒绝”
这将迫使应用程序自身处理内存不足的情况,并且可能它的日志/ coredump /等可能为您提供有用的信息。
注意:当系统内存不足时,您将无法产生新进程!您可能被锁定在系统之外。
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杀手实际杀死内存占用任务,都会显示此信息。