我的nginx有8个进程,每个进程大约占用150M内存。
有时,我的 nginx 会因此被杀死(dmesg)
21228 total pagecache pages 50 pages in swap cache Swap cache stats: add 85, delete 35, find 63/64 Free swap = 2031300kB Total swap = 2031608kB 3407856 pages RAM 3180034 pages HighMem 290515 pages reserved 36448 pages shared 491788 pages non-shared
Out of memory:kill process 16373 (nginx) score 5013 or a child
我用谷歌搜索了一下,发现低内存已经用完了,所以 oom-killer 开始做它的工作......
这是我的问题:
我有16GB内存,但低内存只有800M(free -lm),我该如何使用其余的内存? google告诉我我可以使用补丁kernel-hugemem,但它只适用于centos4,我的是centos5.2,所以...
nginx进程使用150MB内存是否太多了?你们从来没有遇到过这样的问题吗?
低内存让我很困惑,32位系统在没有PAE的情况下可以使用3GB以上的内存,那么为什么要低/高内存呢?不是内核bug吗?
最佳答案
我注意到您有大量的可用交换空间,这应该可以防止 OOM killer 激活,但由于某种原因没有激活。 This question from serverfault 表明 OOM 且未使用交换区意味着失败的分配是在内核模式下,由需要大量内存的驱动程序引起。这也可以解释为什么免费的 HighMem 不足以满足请求(内核模式的东西可以从特定区域请求内存)。您应该在 dmesg 中进一步查看,看看是否有任何线索,例如回溯。
关于问题的第三部分,使用 PAE 时 HighMen 和 LowMem 之间存在区别,因为它将物理地址空间扩展到 36 位,而虚拟地址空间仍然是 32 位。访问全部潜在的 64G 物理地址不可能像访问固定的 4G 子集那样快,因此内核将内存进行划分,并尝试将对性能最关键的内容保留在“低”区域。
关于linux - Nginx 因 “Out of memory” 被杀死?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11322360/