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

Linux Nginx因“内存不足”而被杀?,linux,memory,nginx,Linux,Memory,Nginx,我的nginx有8个进程,每个进程占用大约150M内存 有时,我的nginx会因此而被杀(dmesg) 21228总页面缓存页面交换缓存中的50页交换缓存统计信息: 添加85,删除35,查找63/64自由交换=2031300kB总交换= 2031608kB 3407856页RAM 3180034页高内存290515页 保留36448页共享491788页非共享 内存不足:杀死进程16373 nginx score 5013或子进程 我用谷歌搜索了一下,发现内存不足,所以oom杀手开始工作了 以下是

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

有时,我的nginx会因此而被杀(dmesg)

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

内存不足:杀死进程16373 nginx score 5013或子进程

我用谷歌搜索了一下,发现内存不足,所以oom杀手开始工作了

以下是我的问题:

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

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

低内存让我困惑,32位系统在没有PAE的情况下可以使用超过3GB的内存,那么为什么要使用低/高内存呢?这不是内核错误吗


我注意到你有很多免费的交换,这应该可以阻止OOM杀手激活,但由于某些原因没有。from serverfault表示未使用交换的OOM意味着分配失败是在内核模式下,这是由需要大量内存的驱动程序造成的。这也可以解释为什么免费的HighMem不够好,无法满足内核模式的请求,因为可以从特定区域请求内存。您应该在dmesg中向后看一点,看看是否有任何线索,比如回溯


至于问题的第三部分,当使用PAE时,HighMen和LowMem之间存在区别,因为它将物理地址空间扩展到36位,而虚拟地址空间仍然是32位。访问全部64G物理地址的速度不如访问固定4G子集的速度快,因此内核会将内存分割开来,并试图将最关键的性能保持在较低的区域。

您使用的是什么操作系统?内存管理在FreeBSD和Linux之间非常不同。即使是不同的BSD变体FreeBSD/NetBSD/OpenBSD也有一些重要的差异,如果您不知道发生了什么,可能会导致奇怪。请连接nginx配置和free-m输出X,我同意您关于将最关键的性能保持在低端的观点,但是我的free-m输出是这样的:总使用量free Mem:12177173710439 Low:780263516 Low区域不应该是4*1024MB?