Linux内存管理 --- (17)内存耗尽杀手
2020-06-25 本文已影响0人
小桥流水啦啦啦
1、脑图
![](https://img.haomeiwen.com/i10686669/77a3117e3085dfda.png)
2、大纲
17、内存耗尽杀手
当内存严重不足时,页分配器多次尝试直接页回收失败以后,就会调用内存耗尽杀手(OOM killer,OOM是“Out of Memory”的缩写),选择进程杀死,释放内存。
1、使用方法
无配置宏,配置参数如下:
(1)/proc/sys/vm/oom_kill_allocating_task:是否允许杀死正在申请内存分配病触发内存耗尽的进程,避免扫描进程链表选择进程。
非0值表示允许,0表示禁止,默认禁止。
(2)/proc/sys/vm/oom_dump_tasks:是否允许内存耗尽杀手杀死进程的时候打印所有用户进程的内存使用信息。
非零值表示允许,0表示禁止,默认允许。
(3)/proc/sys/vm/panic_on_oom:是否允许在内存耗尽的时候内核恐慌(panic),重启系统。
0表示禁止内核恐慌;默认值是0.
1表示允许内核恐慌,但是如果进程通过内存策略或cpuset限制了允许使用的内存节点,这些内存节点耗尽内存,不需要重启系统,可以杀死进程,因为其他内存节点可能有空闲的内存;
2表示强制执行内核恐慌。
如果把panic_on_oom设置成非零值,优先级比参数oom_kill_allocatiing_task高。
2、技术原理
1、全局的内存耗尽杀手
指内存严重不足时,从整个系统选择进程杀死。
2、内存控制组的内存耗尽杀手
指内存控制组的内存使用量超过硬限制的时候,从内存控制组选择进程杀死。
代码走读
/mm/oom_kill.c
out_of_memory
check_panic_on_oom
sysctl_oom_kill_allocating_task
oom_kill_process(current)
select_bad_process
oom_kill_process(bad)
(完)