请在Chrome、Firefox、IE8+等现代浏览器浏览本站。 本博客所有文章为原创,图片不加水印,随意转载,但请注明来源,谢谢!

关于OOM-Killer以及防止被清理的设置方法

服务器 kxjhwbb 7876℃ 0评论

网上可搜到的,OOM-killer:Out-of-Memory (OOM) Killer是一种保护机制,用于当内存严重不足时,为了系统的继续运转,内核迫不得已挑选一个进程,将其杀死,以释放内存,缓解内存不足的问题。

3种Overcommit的策略

Linux下有3种Overcommit的策略(参考内核文档:vm/overcommit-accounting),可以在/proc/sys/vm/overcommit_memory配置。取0,1和2三个值,默认是0。

0:启发式策略,比较严重的Overcommit将不能得逞,比如你突然申请了128TB的内存。而轻微的Overcommit将被允许。另外,root能Overcommit的值比普通用户要稍微多些。

1:永远允许Overcommit,这种策略适合那些不能承受内存分配失败的应用,比如某些科学计算应用。

2:永远禁止Overcommit,在这个情况下,系统所能分配的内存不会超过swap+RAM*系数(/proc/sys/vm/overcmmit_ratio,默认50%,你可以调整),如果这么多资源已经用光,那么后面任何尝试申请内存的行为都会返回错误,这通常意味着此时没法运行任何新程序。

禁止oom的话不现实,毕竟它有存在的意义。

将进程排除出 OOM-Killer 清理范围

网上介绍oom-killer的文不少,

都是说各种被其惨杀的经历

但是都没说到如何排除,只说到如何关闭

关闭不是很好,所以找了排除的方法。

/proc/<需保护的PID>/oom_score_adj

修改为-1000,就可以保护你的进程不被杀了

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址