linux - Nginx 因 “Out of memory” 被杀死?

标签 linux memory nginx

我的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 开始做它的工作......

这是我的问题:

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

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

  3. 低内存让我很困惑,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/

相关文章:

c++ - 程序可以在 ideone 上运行,但不能在本地运行(可能是内存错误)

node.js - Nginx代理Ghost博客和Node App无法找到 Assets

configuration - 使用子域配置 Nginx

javascript - 没有哈希值 '#' 的 AngularJS 路由 - 无法正常工作

java - 如何将 Java 应用程序捆绑到 Gnome/Ubuntu 中的关联 .desktop 文件?

c - 检索获得连接重置的客户端的 IP 地址

memory - 使用自定义 Lua 分配器计算内存使用情况,但其结果与 collectgarbage ('count' 不同)

java - 解压缩到 ByteArrayOutputStream - 为什么我会收到 EOFException?

c - 如何关闭文件?

java - 如何使用 channel.connect(); 对远程数据库执行 “insert into” 查询;