首页 > 系统服务 > 详细

Linux OOM Killer 保护机制

时间:2020-04-08 19:24:42      阅读:71      评论:0      收藏:0      [点我收藏+]

Linux OOM Killer 保护机制

OOM killer(Out Of Memory killer)

linux下允许程序申请比系统可用内存更多的内存,这个特性叫Overcommit(过度分配)。在系统内存耗尽的情况下,OOM killer机制选择性的干掉一些进程以求释放一些内存。默认具体的记录日志是在/var/log/messages中。

参数配置

  • 参数/proc/sys/vm/overcommit_memory可以控制进程对内存过量使用的应对策略
1
2
3
overcommit_memory=0,这是缺省值,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
overcommit_memory=1,内核会永远认为有充足的内存可用,进程申请内存时总是允许。
overcommit_memory=2,表示系统所能分配的内存不会超过swap+RAM*系数(/proc/sys/vm/overcommit_ratio,默认50%,可以调整),如果这么多资源已经用光,那么后面任何尝试申请内存的行为都会返回错误,这通常意味着此时没法运行任何新程序。
 

内核决策依据

  • /proc/[pid]/oom_adj,该pid进程被oom killer杀掉的权重,一般介于 [-17,15](具体具体权重的范围需要查看内核确认)之间,越高的权重,意味着更可能被oom killer选中,-17表示禁止被kill掉。

  • /proc/[pid]/oom_score,当前该pid进程的被kill的分数,越高的分数意味着越可能被kill,这个数值是根据oom_adj运算(2?,n就是oom_adj的值)后的结果,本身oom_score是不能修改值。

两种进程保护措施

  • 修改权重

    1
    echo -17 > /proc/[PID]/oom_adj(输入-17,禁止被OOM机制处理)
     
  • 开启OOM较为的保险机制

    1
    2
    echo “vm.panic_on_oom=2” >> /etc/sysctl.conf
    systcl -p
     

参考

https://www.linuxba.com/archives/7744

Linux OOM Killer 保护机制

原文:https://www.cnblogs.com/gaoyuechen/p/12661824.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!