[PATCH] support for panic at OOM
This patch adds panic_on_oom sysctl under sys.vm. When sysctl vm.panic_on_oom = 1, the kernel panics intead of killing rogue processes. And if vm.panic_on_oom is 0 the kernel will do oom_kill() in the same way as it does today. Of course, the default value is 0 and only root can modifies it. In general, oom_killer works well and kill rogue processes. So the whole system can survive. But there are environments where panic is preferable rather than kill some processes. Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
67de648211
commit
fadd8fbd15
4 changed files with 26 additions and 0 deletions
|
@ -29,6 +29,7 @@ Currently, these files are in /proc/sys/vm:
|
|||
- drop-caches
|
||||
- zone_reclaim_mode
|
||||
- zone_reclaim_interval
|
||||
- panic_on_oom
|
||||
|
||||
==============================================================
|
||||
|
||||
|
@ -178,3 +179,15 @@ Time is set in seconds and set by default to 30 seconds.
|
|||
Reduce the interval if undesired off node allocations occur. However, too
|
||||
frequent scans will have a negative impact onoff node allocation performance.
|
||||
|
||||
=============================================================
|
||||
|
||||
panic_on_oom
|
||||
|
||||
This enables or disables panic on out-of-memory feature. If this is set to 1,
|
||||
the kernel panics when out-of-memory happens. If this is set to 0, the kernel
|
||||
will kill some rogue process, called oom_killer. Usually, oom_killer can kill
|
||||
rogue processes and system will survive. If you want to panic the system
|
||||
rather than killing rogue processes, set this to 1.
|
||||
|
||||
The default value is 0.
|
||||
|
||||
|
|
|
@ -186,6 +186,7 @@ enum
|
|||
VM_PERCPU_PAGELIST_FRACTION=30,/* int: fraction of pages in each percpu_pagelist */
|
||||
VM_ZONE_RECLAIM_MODE=31, /* reclaim local zone memory before going off node */
|
||||
VM_ZONE_RECLAIM_INTERVAL=32, /* time period to wait after reclaim failure */
|
||||
VM_PANIC_ON_OOM=33, /* panic at out-of-memory */
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -59,6 +59,7 @@ extern int proc_nr_files(ctl_table *table, int write, struct file *filp,
|
|||
extern int C_A_D;
|
||||
extern int sysctl_overcommit_memory;
|
||||
extern int sysctl_overcommit_ratio;
|
||||
extern int sysctl_panic_on_oom;
|
||||
extern int max_threads;
|
||||
extern int sysrq_enabled;
|
||||
extern int core_uses_pid;
|
||||
|
@ -701,6 +702,14 @@ static ctl_table vm_table[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = VM_PANIC_ON_OOM,
|
||||
.procname = "panic_on_oom",
|
||||
.data = &sysctl_panic_on_oom,
|
||||
.maxlen = sizeof(sysctl_panic_on_oom),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = VM_OVERCOMMIT_RATIO,
|
||||
.procname = "overcommit_ratio",
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <linux/jiffies.h>
|
||||
#include <linux/cpuset.h>
|
||||
|
||||
int sysctl_panic_on_oom;
|
||||
/* #define DEBUG */
|
||||
|
||||
/**
|
||||
|
@ -344,6 +345,8 @@ void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order)
|
|||
break;
|
||||
|
||||
case CONSTRAINT_NONE:
|
||||
if (sysctl_panic_on_oom)
|
||||
panic("out of memory. panic_on_oom is selected\n");
|
||||
retry:
|
||||
/*
|
||||
* Rambo mode: Shoot down a process and hope it solves whatever
|
||||
|
|
Loading…
Reference in a new issue