什么会导致内核内存不足错误?

Nic*_*ton 5 linux kernel memory-usage

我正在运行Debian GNU/Linux 5.0,并且遇到来自内核的间歇性内存不足错误。服务器停止响应除 ping 之外的所有请求,我必须重新启动服务器。

# uname -a
Linux xxx 2.6.18-164.9.1.el5xen #1 SMP Tue Dec 15 21:31:37 EST 2009 x86_64
GNU/Linux
Run Code Online (Sandbox Code Playgroud)

这似乎是 /var/log/messages 中的重要部分

Dec 28 20:16:25 slarti kernel: Call Trace:
Dec 28 20:16:25 slarti kernel: [<ffffffff802bedff>] out_of_memory+0x8b/0x203
Dec 28 20:16:25 slarti kernel: [<ffffffff8020f825>] __alloc_pages+0x245/0x2ce
Dec 28 20:16:25 slarti kernel: [<ffffffff8021377f>] __do_page_cache_readahead+0xc6/0x1ab
Dec 28 20:16:25 slarti kernel: [<ffffffff80214015>] filemap_nopage+0x14c/0x360
Dec 28 20:16:25 slarti kernel: [<ffffffff80208ebc>] __handle_mm_fault+0x443/0x1337
Dec 28 20:16:25 slarti kernel: [<ffffffff8026766a>] do_page_fault+0xf7b/0x12e0
Dec 28 20:16:25 slarti kernel: [<ffffffff8026ef17>] monotonic_clock+0x35/0x7b
Dec 28 20:16:25 slarti kernel: [<ffffffff80262da3>] thread_return+0x6c/0x113
Dec 28 20:16:25 slarti kernel: [<ffffffff8021afef>] remove_vma+0x4c/0x53
Dec 28 20:16:25 slarti kernel: [<ffffffff80264901>] _spin_lock_irqsave+0x9/0x14
Dec 28 20:16:25 slarti kernel: [<ffffffff8026082b>] error_exit+0x0/0x6e
Run Code Online (Sandbox Code Playgroud)

完整片段在这里: http: //pastebin.com/a7eWf7VZ

我认为服务器实际上可能内存不足(它有 1GB 物理内存),但我的 Cacti 内存图对我来说看起来不错......

一位朋友在这里纠正了我;他指出,该图实际上是倒置的,因为紫色表示内存空闲(不是如标题所示使用内存)。

内存使用图

但奇怪的是,在内核崩溃前不久,负载图突然飙升:

平均负载图

我可以查看哪些日志以获取更多信息?

更新:

也许值得注意 - CPU 百分比和网络流量图表在崩溃时均正常。唯一的异常是平均负载图。

更新2:

我认为这种情况是在我部署 Passenger/Ruby 时开始发生的,并且使用top我发现 Ruby 正在使用大部分内存和相当数量的 CPU:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
 5189 www-data  18   0  255m 124m 3388 S    0 12.1  12:46.59 ruby1.8            
14087 www-data  16   0  241m 117m 2328 S   21 11.4   3:41.04 ruby1.8            
15883 www-data  16   0  239m 115m 2328 S    0 11.3   1:35.61 ruby1.8            
Run Code Online (Sandbox Code Playgroud)

eww*_*ite 5

检查日志消息中是否有内核内存不足杀手的指示,或者OOM killeddmesg. 这可能会表明哪些进程是 OOM 杀手的目标。另请查看以下内容:

http://lwn.net/Articles/317814/

http://linux-mm.org/OOM_Killer

这个系统有什么作用?您是否同时耗尽交换空间?根据您详细描述崩溃的外部链接,看起来 rsyslogd 是问题所在。在这种情况下,定期重新启动应用程序可能会很方便。