zoukankan      html  css  js  c++  java
  • Linux OOM killer

    一、写在前面

      最近学习 docker 过程中遇到 --oom-score-adj 和 --oom-kill-disable 的参数,所以就查阅资料简单了解下OOM并加以记录,并没有看过内核相关的书籍(菜鸡一个 -_- | |),各位路过的道友有好书可以推荐下,十分感谢,mua~~

    二、什么是OOM

      OOM 就是 out of memory 的缩写,当“不合格”的程序运行在你的系统上,它会吃掉你所有的内存资源,导致kernel无法分配内存在其它进程(OOM)。虽然系统管理员可以增加内存来临时解决问题,但想从根本上解决还是要处理掉这个问题程序。不过在管理员干涉之前,遇到 OOM 时 kernel 也有自己的处理方式,这要根据 OOM 的参数来进行相应的处理。

    三、OOM相关参数

    1. /proc/sys/vm/panic_on_oom

    • Arguments

      • 值为0:表示启动 OOM killer。

        • 当 panic_on_oom的值为0或者上一步没有触发 kernel panic,kernel 就会检查/proc/sys/vm/oom_kill_allocating_task。
      • 值为1:表示有可能会触发 kernel panic,也有可能启动 OOM killer。

      • 值为2:表示强制触发 kernel panic,内核崩溃GG。

    2. /proc/sys/vm/oom_kill_allocating_task

    • Arguments

      • 值为0:会 kill 掉得分最高的进程(怎么计分的往下看)
      • 值为非0:会kill 掉当前申请内存而触发OOM的进程
      • 当然,一些系统进程(如init)或者被用户设置了oom_score_adj的进程等可不是说杀就杀的。

    3. /proc/sys/vm/oom_dump_tasks

    • Introduction

      • 作为系统管理员,我们肯定希望不管是出现 kernel panic 或者 OOM killer 的情况都能够留下些类似日志的东西,让我们能了解出现此种情况的原因,oom_dump_tasks参数可以记录进程标识信息、该进程使用的虚拟内存总量、物理内存、进程的页表信息等等。
    • Arguments

      • 值为0:关闭打印上述日志。在大型系统中,可能存在有上千个进程,逐一打印使用内存信息可能会造成性能问题。

      • 值为非0:有三种情况会打印进程内存使用情况

        • 由 OOM 导致 kernel panic 时
        • 没有找到符合条件的进程 kill 时
        • 找到符合条件的进程并 kill 时

    4. oom_adj、oom_score_adj 和 oom_score

    • Introduction

      • 之所以放在一起,是因为这三个参数的关联性比较紧密。这三个参数都和具体的进程相关,所以位置都是在 /proc/进程PID/ 目录下。假设现在已经选择的是出现 OOM 的时候启动 killer,那么 kill 哪个进程呢?那就要看它们的的分数了,分数越高 G 的越快。(突然觉得做学渣还是蛮幸福的 _
      • 内核会对进程打分(oom_score),主要包括两部分,系统打分和用户打分。系统打分就是根据进程的物理内存消耗量;用户打分就是 oom_score_adj 的值。如果用户指定 oom_score_adj 的值为 -1000,也就是表示禁止 OOM killer 杀死该进程。
      • 用户可以通过调整 oom_score_adj 的值来决定最终 oom_score 的值,oom_score_adj 的取值范围是 -1000~1000,为0时表示用户不调整 oom_score。另外,root进程拥有3%的内存使用特权,因此做最终 oom_score 计算时需要减去这些内存使用量。
      • oom_adj是一个旧的接口参数,其功能类似oom_score_adj,为了兼容,目前仍然保留这个参数,当操作这个参数的时候,kernel实际上是会换算成oom_score_adj。


    四、参考资料



    写作不易,转载请注明出处,谢谢~~

  • 相关阅读:
    洛谷 P5249 [LnOI2019]加特林轮盘赌 概率DP
    c++提高学习笔记——05-c++STLday10
    c++基础学习笔记——04-c++day09
    c++基础学习笔记——04-c++day08
    c++基础学习笔记——04-c++day07
    c++基础学习笔记——04-c++day06
    c++基础学习笔记——04-c++day05
    c++基础学习笔记——04-c++day04
    c++基础学习笔记——04-c++day03
    c++基础学习笔记——04-c++day02
  • 原文地址:https://www.cnblogs.com/ccbloom/p/11249871.html
Copyright © 2011-2022 走看看