最近,我在其中一台服务器的kern.log中注意到这样一个条目:
Feb 16 00:24:05 aramis kernel: swapper: page allocation failure. order:0, mode:0x20
我想知道:
交换使用率很低(低于10%),到目前为止,我还没有注意到由于内存不足而导致任何进程中断。
附加信息:
Debian的错误666021似乎是同样的问题的报告。 build议有:
#change value for this boot sysctl -w vm.min_free_kbytes=65536 #change value for subsequent boots echo "vm.min_free_kbytes=65536" >> /etc/sysctl.conf
http://russ.garrett.co.uk/2009/01/01/linux-kernel-tuning/有一些讨论什么时候改变这个设置可能是有用的,在这里转载:
这告诉内核在任何时候都试图保持64MB的RAM空闲。 这在两个主要情况下是有用的:
无交换机器,您不希望传入的networkingstream量淹没内核,并在有足够时间刷新任何缓冲区之前强制执行OOM。
x86机器,出于同样的原因:x86架构只允许低于约900MB的DMA传输。 所以你可以结束与大量的RAM免费的OOM错误的奇怪的情况。
我在3.2.12-gentoo x86机器上应用了这个设置,但是我仍然遇到这些错误。
检查vm.zone_reclaim_mode也是值得的:参见http://www.kernel.org/doc/Documentation/sysctl/vm.txt和https://bugzilla.redhat.com/show_bug.cgi?id=770545
我刚刚在运行Debian 5和内核2.6.39.3 64位的联想NAS上解决了这个错误。
尽pipe看起来很可怕,但这些消息是信息性的,根据https://www.novell.com/support/kb/doc.php?id=7002803
然而,他们正在填补我非常有限的根分区(这个设备有一个50 MB的根分区?!)
对我来说,修正是将vm.min_free_kbytes从65536降到16384 。
之后,操作系统仍然有107 MB的可用内存和2 GB的缓冲区。 这没有任何意义,但它停止了所有的日志logging。