oom killer

当内存严重不足时,内核有两种选择:1.直接panic 2.杀掉部分进程,释放一些内核。通过/proc/sys/vm/panic_on_oom可以控制,当panic_on_oom为1时,直接 panic,当panic_on_oom为0时内核将通过oom(Out Of Memory)killer杀掉部分进程。
     对于每个进程都有一个oom_score的属性(/proc/PID/oom_score),oom killer会杀死oom_score较大的进程,当oom_score为0时禁止内核杀死该进程。对过设置/proc/PID/oom_adj可以改变 oom_score,oom_adj的范围为【-17,15】,当oom_adj=-17时,oom_score将变为0。
     综上,可以通过命令 echo 0 > /proc/PID/oom_adj 来防止进程被oom_killer杀死。


参考:

Out of Memory (OOM)

Out of Memory (OOM) refers to a computing state where all available memory, including swap space, has been allocated. Normally this will cause the system to panic and stop functioning as expected. There is a switch that controls OOM behavior in /proc/sys/vm/panic_on_oom. When set to 1 the kernel will panic on OOM.A setting of 0instructs the kernel to call a function named oom_killer on an OOM. Usually, oom_killer can kill rogue processes and the system will survive.

1.     The easiest way to change this is to echo the new value to /proc/sys/vm/panic_on_oom.

2.  # cat /proc/sys/vm/panic_on_oom

3.  1

4.   

5.  #  echo 0 > /proc/sys/vm/panic_on_oom

6.   

7.  # cat /proc/sys/vm/panic_on_oom

8.  0

9.     It is also possible to prioritize which processes get killed by adjusting the oom_killer score. In /proc/PID/there are two tools labelled oom_adj and oom_score. Valid scores for oom_adj are in the range -16 to +15. This value is used to calculate the 'badness' of the process using an algorithm that also takes into account how long the process has been running, amongst other factors. To see the current oom_killer score, view theoom_score for the process. oom_killer will kill processes with the highest scores first.

This example adjusts the oom_score of a process with a PID of 12465 to make it less likely that oom_killerwill kill it.

# cat /proc/12465/oom_score

79872

 

# echo -5 > /proc/12465/oom_adj

 

# cat /proc/12465/oom_score

78

10.   There is also a special value of -17, which disables oom_killer for that process. In the example below,oom_score returns a value of O, indicating that this process would not be killed.

11. # cat /proc/12465/oom_score

12. 78

13.  

14. # echo -17 > /proc/12465/oom_adj

15.  

16. # cat /proc/12465/oom_score

0

 

 

oom_dump_tasks

Submitted by admin on Tue, 2009-12-01 03:57 

Enables a system-wide task dump (excluding kernel threads) to be produced when the kernel performs an OOM-killing and includes such information as pid, uid, tgid, vm size, rss, cpu, oom_adj score, and name. This is helpful to determine why the OOM killer was invoked and to identify the rogue task that caused it.

If this is set to zero, this information is suppressed. On very large systems with thousands of tasks it may not be feasible to dump the memory state information for each one. Such systems should not be forced to incur a performance penalty in OOM conditions when the information may not be desired.

If this is set to non-zero, this information is shown whenever the OOM killer actually kills a memory-hogging task.

The default value is 0.

oom_kill_allocating_task

Submitted by admin on Tue, 2009-12-01 03:59 

This enables or disables killing the OOM-triggering task in out-of-memory situations.

If this is set to zero, the OOM killer will scan through the entire tasklist and select a task based on heuristics to kill. This normally selects a rogue memory-hogging task that frees up a large amount of memory when killed.

If this is set to non-zero, the OOM killer simply kills the task that triggered the out-of-memory condition. This avoids the expensive tasklist scan.

If panic_on_oom is selected, it takes precedence over whatever value is used in oom_kill_allocating_task.

The default value is 0.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值