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

  • 相关阅读:
    Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. ......
    UVA 1597 Searching the Web
    UVA 1596 Bug Hunt
    UVA 230 Borrowers
    UVA 221 Urban Elevations
    UVA 814 The Letter Carrier's Rounds
    UVA 207 PGA Tour Prize Money
    UVA 1592 Database
    UVA 540 Team Queue
    UVA 12096 The SetStack Computer
  • 原文地址:https://www.cnblogs.com/gaoyuechen/p/12661824.html
Copyright © 2011-2022 走看看