[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
@ -29,6 +29,7 @@ Currently, these files are in /proc/sys/vm:
|
|||||||
- drop-caches
|
- drop-caches
|
||||||
- zone_reclaim_mode
|
- zone_reclaim_mode
|
||||||
- zone_reclaim_interval
|
- 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
|
Reduce the interval if undesired off node allocations occur. However, too
|
||||||
frequent scans will have a negative impact onoff node allocation performance.
|
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_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_MODE=31, /* reclaim local zone memory before going off node */
|
||||||
VM_ZONE_RECLAIM_INTERVAL=32, /* time period to wait after reclaim failure */
|
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 C_A_D;
|
||||||
extern int sysctl_overcommit_memory;
|
extern int sysctl_overcommit_memory;
|
||||||
extern int sysctl_overcommit_ratio;
|
extern int sysctl_overcommit_ratio;
|
||||||
|
extern int sysctl_panic_on_oom;
|
||||||
extern int max_threads;
|
extern int max_threads;
|
||||||
extern int sysrq_enabled;
|
extern int sysrq_enabled;
|
||||||
extern int core_uses_pid;
|
extern int core_uses_pid;
|
||||||
@ -701,6 +702,14 @@ static ctl_table vm_table[] = {
|
|||||||
.mode = 0644,
|
.mode = 0644,
|
||||||
.proc_handler = &proc_dointvec,
|
.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,
|
.ctl_name = VM_OVERCOMMIT_RATIO,
|
||||||
.procname = "overcommit_ratio",
|
.procname = "overcommit_ratio",
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <linux/jiffies.h>
|
#include <linux/jiffies.h>
|
||||||
#include <linux/cpuset.h>
|
#include <linux/cpuset.h>
|
||||||
|
|
||||||
|
int sysctl_panic_on_oom;
|
||||||
/* #define DEBUG */
|
/* #define DEBUG */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -344,6 +345,8 @@ void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONSTRAINT_NONE:
|
case CONSTRAINT_NONE:
|
||||||
|
if (sysctl_panic_on_oom)
|
||||||
|
panic("out of memory. panic_on_oom is selected\n");
|
||||||
retry:
|
retry:
|
||||||
/*
|
/*
|
||||||
* Rambo mode: Shoot down a process and hope it solves whatever
|
* Rambo mode: Shoot down a process and hope it solves whatever
|
||||||
|
Loading…
Reference in New Issue
Block a user