页面分配失败 – 我内存不足?

最近,我在其中一台服务器的kern.log中注意到这样一个条目:

 Feb 16 00:24:05 aramis kernel: swapper: page allocation failure. order:0, mode:0x20 

我想知道:

  1. 这个消息到底意味着什么?
  2. 我的服务器内存不足?

交换使用率很低(低于10%),到目前为止,我还没有注意到由于内存不足而导致任何进程中断。

附加信息:

  • 该服务器是运行Debian 6.0的Xen实例(DomU)
  • 它有512 MB的RAM和512 MB的交换分区
  • 虚拟机内部的CPU负载平均显示为0.25

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机器上应用了这个设置,但是我仍然遇到这些错误。

我刚刚在运行Debian 5和内核2.6.39.3 64位的联想NAS上解决了这个错误。

尽pipe看起来很可怕,但这些消息是信息性的,根据https://www.novell.com/support/kb/doc.php?id=7002803

然而,他们正在填补我非常有限的根分区(这个设备有一个50 MB的根分区?!)

对我来说,修正是将vm.min_free_kbytes65536降到16384

之后,操作系统仍然有107 MB的可用内存和2 GB的缓冲区。 这没有任何意义,但它停止了所有的日志logging。