RHEL4的运行
查看OOM Killer在RHEL4(Linux 2.6.9)中的运行情况。在下例中,是内存、交换区都为2GB的环境下,使用负载测试工具stress刻意消耗内存。
stress是给内存、CPU、磁盘I/O施加负载的工具。既可以为其中一项增加负载,也可以同时为这三项中的几项增加负载。stress在运行中如果接收到信号,就会输出信息并终止。
在上游内核中无法禁用OOM Killer,而在RHEL4中则通过/proc/sys/vm/oom-kill可以禁用OOM Killer。
echo 0>/proc/sys/vm/oom-kill
或者
/sbin/sysctl-w vm.oom-kill=0
禁用后OOM Killer就不会发送信号,但是会输出如上内存信息。
RHEL5的运行
在RHEL5(Linux 2.6.18)中对OOM Killer的运行进行确认的方法与RHEL4中相同。
stress—vm 2—vm-bytes 2G—vm-keep
stress:info:[11779]dispatching hogs:0 cpu,0 io,2 vm,0 hdd
stress:FAIL:[11779](416)<—worker 11780 got signal 9/SIGKILL/
stress:WARN:[11779](418)now reaping child worker processes
stress:FAIL:[11779](452)failed run completed in 46s
此时的控制台画面如下所示。添加了运行OOM Killer时的回溯输出,便于调试。
Call Trace:
[<ffffffff800bf551>]out_of_memory+0x8e/0x321
[<ffffffff8000f08c>]__alloc_pages+0x22b/0x2b4
……
[<ffffffff800087fd>]__handle_mm_fault+0x208/0xe04
[<ffffffff80065a6a>]do_page_fault+0x4b8/0x81d
[<ffffffff800894ad>]default_wake_function+0x0/0xe
[<ffffffff80039dda>]tty_ldisc_deref+0x68/0x7b
[<ffffffff8005cde9>]error_exit+0x0/0x84
Mem-info:
……
Swap cache:add 512503,delete 512504,find 90/129,race 0+0
Free swap=0kB
Total swap=2048276kB
Free swap:0kB
524224 pages of RAM
42102 reserved pages
78 pages shared
0 pages swap cached
Out of memory:Killed process 11780(stress).
RHEL6的运行
RHEL6. 0中OOM Killer计算得分的方式基本和RHEL5中没有不同。RHEL6系不会如“RHEL5的特征”中所述慎重地运行。其运行基本与上游内核相同。