博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有关OOM KILLER的一些理解
阅读量:6126 次
发布时间:2019-06-21

本文共 691 字,大约阅读时间需要 2 分钟。

Linux下有一种OOM KILLER 的机制,它会在系统内存耗尽的情况下,启用自己算法有选择性的kill 掉一些进程。

一、为什么会有OOM killer

      当我们使用应用时,需要申请内存,即进行malloc的操作,进行malloc操作如果返回一个非NULL的操作表示申请到了可用的内部你。事实上,这个地方是可能存在bug的。Linux有一种内存优化机制,即:允许程序申请比系统可用内存更多的内存(术语:overcommit),但是Linux并不保证这些内存马上可用,如果凑巧你申请到的内存中在你需要使用的时候还没有完全释放出来,这个时候就会触发OOM killer了。内核代码为:mm/oom_kill.c,其调用顺序为:

malloc -> _alloc_pages -> out_of_memory() -> select_bad_process() -> badness()

 

二、如何选择要kill掉的进程

重点分析badness代码,可以参考附件代码,我看了个大概:

1)计算该进程以及其子进程所占用的内存;

2)计算CPU时间和存活时间

3)做相应的权重调整

总结起来,就是占用内存越高,得分越高,cpu时间和存活时间越高,得分越低;进程优先级越高,得分越低

综合上述因素后,会得到一个point的值,得分最高的会被选中,然后被kill掉。

 

系统日志文件相关:

/var/log/messages

 

/proc/pid/oom_score

/proc/pid/oom_adj

转载于:https://www.cnblogs.com/ytfcz/p/4276728.html

你可能感兴趣的文章
致远推出全分销A6+,走协同OA差异化竞争路
查看>>
MVVM 框架解析之双向绑定
查看>>
Vue项目使用eslint + prettier规范代码风格
查看>>
如何基于迁移学习快速识别出讲话的人是谁?
查看>>
理解javascript的call 、 apply 、 bind
查看>>
【iOS 开发】iOS 10.3 如何更换 app 图标
查看>>
自动「脑补」3D环境!DeepMind最新Science论文提出生成查询网络GQN
查看>>
比特币的标准是什么
查看>>
使用即构ZEGO视频直播SDK巧妙地实现直播答题方案
查看>>
Android解析ClassLoader(二)Android中的ClassLoader
查看>>
LRUCache原理的简单分析
查看>>
联网对战游戏开源实例分享之《斗兽棋》
查看>>
从零到壹,快速产品设计流程步骤
查看>>
人人都会设计模式---装饰模式--Decorator
查看>>
iOS 运行时之 Associative(关联)
查看>>
关于判断是不是电话号码
查看>>
初探验证码识别
查看>>
逆向基础(九)
查看>>
[代码审计]web程序对客户端数据加解密带来的安全问题
查看>>
浅析 <路印协议--Loopring> 及整体分析 Relay 源码
查看>>