0

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

有时,我的 nginx 会因此而被杀死(dmesg)</p>

21228 页总缓存页 50 页交换缓存交换缓存统计:添加 85,删除 35,找到 63/64 空闲交换 = 2031300kB 总交换 = 2031608kB 3407856 页 RAM 3180034 页 HighMem 290515 页保留 36448 页共享 491788 页非共享

Out of memory:kill process 16373 (nginx) score 5013 or a child

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

这是我的问题:

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

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

  3. Low 内存让我很困惑,32 位系统在没有 PAE 的情况下可以使用超过 3GB 的内存,那么为什么要使用 Low/Hign ​​内存呢?是不是内核bug?

4

1 回答 1

0

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

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

于 2012-07-04T07:13:36.607 回答