Nginx因“内存不足”而被杀?

时间:2012-07-04 04:19:23

标签: linux memory nginx

我的nginx有8个进程,每个进程大约需要 150M 内存。

我的nginx不时被杀死(dmesg)

  

21228个总页面缓存页面50个交换缓存中的页面交换缓存统计信息:   添加85,删除35,查找63/64免费交换= 2031300kB总交换=   2031608kB 3407856页RAM 3180034页HighMem 290515页   保留36448页共享491788页非共享

     

内存不足:杀死进程16373(nginx)得分5013或儿童

我用谷歌搜索,结果低内存用完了,所以oom-killer开始做它的工作......

以下是我的问题:

  1. 我得到 16GB 内存,但是低内存只是 800M (free -lm),我该如何使用剩下的?谷歌告诉我,我可以使用补丁 kernel-hugemem ,但它只适用于centos4,我的 centos5.2 ,所以......

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

  3. 低内存让我很困惑,32位系统可以使用超过3GB的内存而不需要PAE,那么为什么Low / Hign内存适用于?不是内核错误吗?

1 个答案:

答案 0 :(得分:0)

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

至于问题的第3部分,使用PAE时HighMen和LowMem之间存在区别,因为它将物理地址空间扩展到36位,而虚拟地址空间仍然是32位。访问完全潜在的64G物理地址不能像访问固定4G子集一样快,因此内核将内存分开并尝试将性能最关键的内容保留在“低”区域。