2012-03-29 140 views
2

這裏需要巨大的幫助,因爲這影響了我們的生產實例。MongoDb副本服務器由於內存不足而死亡?

一個副本服務器是缺乏存儲器失敗因(見下文來自kern.log片的塊)

kernel: [80110.848341] Out of memory: kill process 4643 (mongod) score 214181 or a child 
kernel: [80110.848349] Killed process 4643 (mongod) 

UPDATE

kernel: mongod invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0 
kernel: [85544.157191] mongod cpuset=/ mems_allowed=0 
kernel: [85544.157195] Pid: 7545, comm: mongod Not tainted 2.6.32-318-ec2 

透視:

  1. 主服務器數據庫大小是50GB,其中30GB是由索引填充的。
  2. 主服務器有7GB RAM,而輔助服務器有3.1GB RAM。
  3. 這兩臺服務器都是64位機器,分別運行Debian/Ubuntu。
  4. 兩個服務器

註上運行蒙戈2.0.2: 我看到吉拉 - 蒙戈的網站最近類似issue has been created - 沒有問題的答案呢。

回答

5

你在這些實例上啓用了交換嗎?雖然mongoDB操作通常不需要,但它可以防止進程在內核遇到OOM情況時被內核殺死。這就是這裏所說的:

http://www.mongodb.org/display/DOCS/Production+Notes#ProductionNotes-Swap

引用的完全重新同步,而不是正在進行的生產複製過程中發生了問題 - 是,你還做什麼?

一旦事情穩定下來,看一下你在mongostat或MMS上的Res內存,如果超過或接近3GB,你應該考慮升級你的輔助。

+0

是的,在重新同步過程中發生了這個問題 - 我已經安裝了這個服務器並添加爲副本成員,我相信Mongo會在輔助服務器(?)中重新同步 – 2012-03-29 10:17:28

+0

副本是否有交換分區?它很有可能被殺死,因爲同步和隨後的索引構建消耗了太多的內存 - 添加swap會停止,但意味着它會運行緩慢 – 2012-03-29 10:53:52

+0

根據您的建議我添加了一個交換文件,在那裏,讓我看看是否有幫助。 – 2012-03-29 11:18:23

0

我有類似的問題。其中一個要檢查的是你有多少個開放連接。運行lsof命令查看與mongod進程關聯的打開文件。嘗試禁用日記功能,並查看是否看到少量的打開文件。如果是這樣,請複製副本,然後重新啓用日記功能。這可能有幫助。添加交換也應該有幫助,或者如果可能的話臨時存儲RAM。

+0

我害怕刪除日誌並重新啓用它們,添加交換內存幫助了我。 – 2012-03-30 09:16:01