最近,我注意到kern.log
我的其中一台服务器中有类似这样的条目:
Feb 16 00:24:05 aramis kernel: swapper: page allocation failure. order:0, mode:0x20
我想知道:
- 这条消息到底是什么意思?
- 我的服务器内存不足吗?
交换使用率相当低(不到 10%),到目前为止我还没有注意到任何进程由于内存不足而被终止。
附加信息:
- 该服务器是运行 Debian 6.0 的 Xen 实例 (DomU)
- 它有 512 MB 的 RAM 和 512 MB 的交换分区
- 虚拟机内部的 CPU 负载平均为 0.25
答案1
Debian 错误 666021似乎是关于同一问题的报告。那里的建议是:
#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 空闲。这在两种主要情况下很有用:
无交换的机器,您不希望传入的网络流量压垮内核并在有时间刷新任何缓冲区之前强制 OOM。
x86 机器,原因相同:x86 架构仅允许低于约 900MB RAM 的 DMA 传输。因此,您可能会遇到 OOM 错误的奇怪情况,并且有大量 RAM 可用。
我在我的 3.2.12-gentoo x86 机器上应用了此设置,但仍然收到这些错误。
答案2
也许还值得检查一下vm.zone_reclaim_mode
:参见http://www.kernel.org/doc/Documentation/sysctl/vm.txt
答案3
我刚刚在运行 Debian 5 和内核 2.6.39.3 64 位的联想 NAS 上解决了这个错误。
这些信息虽然看起来很吓人,但仍然具有参考价值。https://www.novell.com/support/kb/doc.php?id=7002803
然而,它们填满了我非常有限的根分区(这个设备有一个 50 MByte 的根分区?!)
对我来说,解决方法是vm.min_free_kbytes
从65536
设置为16384
。
之后,操作系统仍然有 107 MB 的可用内存和 2 GB 的缓冲区。这毫无意义,但它停止了所有日志记录。