You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Linux内存耗尽(OOM)时的进程终止规则咨询

Linux内存耗尽(OOM)时的进程终止规则咨询

嘿,这个问题问到点子上了!Linux系统在内存彻底耗尽的时候,可不是“拍脑袋”随便杀进程的,它靠一套叫**OOM Killer(内存不足杀手)**的机制来做决策,核心逻辑是给每个进程打分,优先干掉得分最高的那个。

具体来说,你需要知道这些关键点:

  • 分数是核心依据:每个进程都有一个oom_score值,你可以通过cat /proc/[进程ID]/oom_score查看这个分数,数值越高,被优先终止的概率越大。
  • 分数怎么算出来的?
    • 最主要的参考项:进程占用的内存越大,分数越高,但这不是唯一标准
    • 进程运行时长:刚启动不久的进程分数会更高——毕竟重启它的代价更小
    • 进程优先级(nice值):优先级越低(nice数值越大)的进程,分数越高;反之,高优先级进程分数会被压低
    • 系统关键进程豁免:像initsystemd这类维持系统基本运行的核心进程,分数会被刻意设为负数,几乎不会被选中
  • 不是绝对看内存大小:比如有些后台低优先级的小进程,算出来的分数可能比占用内存更多的服务进程还高,那它会先被干掉;反过来,哪怕某个大进程是系统必需的,也能通过调整参数避免被终止
  • 手动干预的方法:你可以修改/proc/[进程ID]/oom_score_adj的值(范围从-1000到1000),负数会降低进程的被杀概率,设为-1000的话,进程会直接被OOM Killer豁免;正数则会提高它被选中的概率

备注:内容来源于stack exchange,提问作者Serve Laurijssen

火山引擎 最新活动