2012-07-04 61 views
0

我的nginx有8个进程,每个进程都需要大约150M内存。Nginx因“内存不足”而死亡?

不时,我的nginx的被杀对这个(dmesg的)

21228总页缓存页50页交换缓存交换缓存统计: 加85,删除35,发现63/64自由交换= 2031300kB总交换= 2031608kB 3407856页RAM 3180034页HIGHMEM 290515页 保留36448页共享491788页非共享

缺货的存储器:杀过程16373(nginx的)分值5013或儿童

我GOOGLE了它,原来,低内存用完,所以OOM杀手开始做的工作......

这里是我的问题:

  1. 我得到16GB内存,但低内存只是800M(免费-lm),我怎么能使用其余的?谷歌告诉我,我可以用一个补丁内核的hugemem,但只针对的CentOS4,煤矿是centos5.2,所以......

  2. 是太多了nginx的过程中使用150MB的内存?你们从来没有遇到过这样的问题?

  3. 低内存使我困惑,32位系统可以使用超过3GB内存,没有PAE,那么为什么Low/Hign内存为?不是内核错误?

+0

你在使用什么操作系统?内存管理在FreeBSD和Linux之间是非常不同的。即使不同的BSD版本(FreeBSD/NetBSD/OpenBSD)也有一些重要的差异,如果你不知道发生了什么,它们可能会造成怪异。 – ghoti

+0

我的是Centos 5。2,32位 – ZIFF

+0

附上nginx配置和免费-m输出请 –

回答

0

我注意到你有很多的免费交换,这应该可以防止OOM杀手激活,但由于某种原因不是。来自serverfault的This question表示带有未使用交换的OOM意味着失败的分配处于内核模式,这是由需要大量内存的驱动程序引起的。这也可以解释为什么免费的HighMem不足以满足请求(内核模式可以从特定区域请求内存)。你应该在dmesg看起来更远一点,看看是否有任何线索,如回溯。

至于你的问题的第三部分,当使用PAE时HighMen和LowMem是有区别的,因为它将物理地址空间扩展到36位,而虚拟地址空间仍然是32位。访问物理地址的全部潜力不能像访问固定的4G子集一样快,因此内核将内存分开,并试图将最关键性能的事情保持在“低”的范围内。

+0

Thx,我同意你关于**在“低”区**部分保留性能最重要的东西,但我的免费-m输出像这个: – ZIFF

+0

总计免费使用 Mem:12177 1737 10439 低:780 263 516 低区不应该在这里大约4 * 1024MB? – ZIFF