首页 > 其他 > 详细

OOM

时间:2019-04-04 12:25:40      阅读:102      评论:0      收藏:0      [点我收藏+]

一些概念:

    1. Linux下面有个特性叫OOM killer(Out Of Memory killer),这个东西会在系统内存耗尽的情况下跳出来,选择性的干掉一些进程以求释放一些内存。

        典型的情况是:某天机器突然登不上了,能ping通,但是ssh死活连不了。原因是sshd进程被OOM killer干掉了(泪流满面)。

        重启机器后查看系统日志会发现血淋淋的Out of Memory: Killed process ×××、Out of Memory: Killed process 〇〇〇。一篇狼藉,惨不忍睹。

        数据堆积在内存中,内存耗光,逼得OOM killer出来收拾局面。

     2. Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit

         OOM killer与内存overcommit:两者是相互作用的:

         对于一台16G的Linux服务器。如果使用overcommit_memory=0,如果没有没有足够的内存分配,那么应用想分配内存就会失败。如果使用overcommit_memory>0,每次的应用内存申请都会成功,这种成功是建立在OOM killer会杀掉部分进程来实现的。

 

优先杀死哪些进程?

1.Linux下每个进程都有个OOM权重,在/proc/<pid>/oom_adj里面,取值是-17到+15,取值越高,越容易被干掉。

2.最终OOM killer是通过/proc/<pid>/oom_score这个值来决定哪个进程被干掉的。

这个值是系统综合进程的内存消耗量、CPU时间(utime + stime)、存活时间(uptime - start time)和oom_adj计算出的,消耗内存越多分越高,存活时间越长分越低。

总之,总的策略是:损失最少的工作,释放最大的内存同时不伤及无辜的用了很大内存的进程,并且杀掉的进程数尽量少。

 

 

好文章:

https://blog.csdn.net/carlosfu/article/details/84765785

 

OOM

原文:https://www.cnblogs.com/yuzhaoblog/p/10653956.html

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