RHEL4的运行

查看OOM Killer在RHEL4(Linux 2.6.9)中的运行情况。在下例中,是内存、交换区都为2GB的环境下,使用负载测试工具stress刻意消耗内存。

stress是给内存、CPU、磁盘I/O施加负载的工具。既可以为其中一项增加负载,也可以同时为这三项中的几项增加负载。stress在运行中如果接收到信号,就会输出信息并终止。

RHEL4的运行 - 图1

在上游内核中无法禁用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的特征”中所述慎重地运行。其运行基本与上游内核相同。