我的场景是gdb加载二进制,加载中直接被kill了。dmesg查看是oom killer干掉的。怎么禁止?

设置overcommit_memory

echo 2 > /proc/sys/vm/overcommit_memory

永远不overcommit,这样oom killer判定也就没啥用了

关于overcommit 解释一下

vm.overcommit_memory 含义
0 表示内核将检查是否有足够的可用内存。如果有足够的可用内存,内存申请通过,否则内存申请失败,并把错误返回给应用进程
1 表示内核允许超量使用内存直到用完为止
2 表示内核决不过量的(“never overcommit”)使用内存,即系统整个内存地址空间不能超过swap+50%的RAM值,50%是overcommit_ratio默认值,此参数同样支持修改

一般设置是0 也会影响到redis fork save db

Never commit判定

~#grep -i commit /proc/meminfo
CommitLimit:    18403480 kB
Committed_AS:   12516276 kB

ref

  • https://unix.stackexchange.com/questions/432171/completely-disable-oom-killer
  • https://serverfault.com/questions/101916/turn-off-the-linux-oom-killer-by-default
  • http://linuxperf.com/?p=102