2012-07-04 89 views
0

我的nginx有8個進程,每個進程都需要大約150M內存。Nginx因「內存不足」而死亡?

不時,我的nginx的被殺對這個(dmesg的)

21228總頁緩存頁50頁交換緩存交換緩存統計: 加85,刪除35,發現63/64自由交換= 2031300kB總交換= 2031608kB 3407856頁RAM 3180034頁HIGHMEM 290515頁 保留36448頁共享491788頁非共享

缺貨的存儲器:殺過程16373(nginx的)分值5013或兒童

我GOOGLE了它,原來,低內存用完,所以OOM殺手開始做的工作......

這裏是我的問題:

  1. 我得到16GB內存,但低內存只是800M(免費-lm),我怎麼能使用其餘的?谷歌告訴我,我可以用一個補丁內核的hugemem,但只針對的CentOS4,煤礦是centos5.2,所以......

  2. 是太多了nginx的過程中使用150MB的內存?你們從來沒有遇到過這樣的問題?

  3. 低內存使我困惑,32位系統可以使用超過3GB內存,沒有PAE,那麼爲什麼Low/Hign內存爲?不是內核錯誤?

+0

你在使用什麼操作系統?內存管理在FreeBSD和Linux之間是非常不同的。即使不同的BSD版本(FreeBSD/NetBSD/OpenBSD)也有一些重要的差異,如果你不知道發生了什麼,它們可能會造成怪異。 – ghoti

+0

我的是Centos 5。2,32位 – ZIFF

+0

附上nginx配置和免費-m輸出請 –

回答

0

我注意到你有很多的免費交換,這應該可以防止OOM殺手激活,但由於某種原因不是。來自serverfault的This question表示帶有未使用交換的OOM意味着失敗的分配處於內核模式,這是由需要大量內存的驅動程序引起的。這也可以解釋爲什麼免費的HighMem不足以滿足請求(內核模式可以從特定區域請求內存)。你應該在dmesg看起來更遠一點,看看是否有任何線索,如回溯。

至於你的問題的第三部分,當使用PAE時HighMen和LowMem是有區別的,因爲它將物理地址空間擴展到36位,而虛擬地址空間仍然是32位。訪問物理地址的全部潛力不能像訪問固定的4G子集一樣快,因此內核將內存分開,並試圖將最關鍵性能的事情保持在「低」的範圍內。

+0

Thx,我同意你關於**在「低」區**部分保留性能最重要的東西,但我的免費-m輸出像這個: – ZIFF

+0

總計免費使用 Mem:12177 1737 10439 低:780 263 516 低區不應該在這裏大約4 * 1024MB? – ZIFF