zoukankan      html  css  js  c++  java
  • Linux OOM Killer 保护机制

    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

      panic_on_oom(/proc/sys/vm/panic_on_oom)

      决定系统出现oom的时候,要做的操作。接受的三种取值如下:
      0 - 默认值,当出现oom的时候,触发oom killer
      1 - 程序在有cpuset、memory policy、memcg的约束情况下的OOM,可以考虑不panic,而是启动OOM killer。其它情况触发 kernel panic,即系统直接重启
      2 - 当出现oom,直接触发kernel panic,即系统直接重启
      3,oom_adj、oom_score_adj和oom_score
      准确的说这几个参数都是和具体进程相关的,因此它们位于/proc/xxx/目录下(xxx是进程ID)。假设我们选择在出现OOM状况的时候杀死进程,那么一个很自然的问题就浮现出来:到底干掉哪一个呢?内核的算法倒是非常简单,那就是打分(oom_score,注意,该参数是read only的),找到分数最高的就OK了。那么怎么来算分数呢?可以参考内核中的oom_badness函数:
      ————————————————
      版权声明:本文为CSDN博主「Leonban」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
      原文链接:https://blog.csdn.net/hearbeat/article/details/82793258

       

    参考

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

  • 相关阅读:
    烟大课表PC端-不仅仅是浏览器和手机APP
    关于51单片机电子时钟精度的问题
    第十二周项目4-点、圆的关系
    Git on Windows 一些问题
    vi 的使用
    Git 账户认证的一些问题
    [Windows] win7 配置Java开发环境
    Velocity 局部定制模板
    [Storm] Storm与asm的恩恩怨怨
    [Storm] No data flows into bolt
  • 原文地址:https://www.cnblogs.com/gaoyuechen/p/12661824.html
Copyright © 2011-2022 走看看