分类: LINUX
2016-02-02 10:29:29
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 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_taskSubmitted by 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.