mongodb佔物理內存,我們一台伺服器8G內存,沒有開mongodb的時候,物理內存只佔11%,當開了mongodb,mongodb進程的內存顯示是60M,但物理內存已經是99%,請問是什麼原因?有沒有最佳化的辦法,我們是在WINDOWS系統.
大家讲道理2017-04-24 09:15:16
mongodb本身就是不做記憶體管理的,它的記憶體管理完全依賴系統。你可以用系統效能監視器看下記憶體和虛擬記憶體。簡單點來說你有多少記憶體mongdb就會吃多少,就是這麼貪得無厭,它會把絕大部分熱數據都會放在記憶體裡來提升效能,畢竟這也是它的優點。
我們的伺服器是windows server 2008,有32G內存,運行了一段時間後,也是被吃光,但性能讓人驚喜,但那台伺服器上不光只有mongodb,所以經常影響到其他程序,後來我們嘗試用windows的系統資源管理器WSRM,限制mongodb進程的內存,確實有效果你可以試試看。
但我是前年開始使用mongodb的,當時版本比較老,限制內存後mongodb很不穩定,偶爾掛掉,看日誌顯示大體意思是找不到映射的內存了。所以後來我們放棄了限制內存,改用每天定點用程式使用mongodb的指令釋放內存{closeAllDatabases:1}
這個指令也是有成本的,會阻塞到指令完整,而且剛釋放完後效率會降低,要經過一段時間的「暖身」才能慢慢恢復。
我覺得後面這種方法不錯,而且透過這兩年的觀察一切都比較穩定。當然你們要是能單獨給mongodb一台伺服器那是再好不過的了。
迷茫2017-04-24 09:15:16
新的 MongoDB 引擎會認為自己是系統中唯一重要的服務,因此會盡量佔用記憶體來作為自己的快取(不是作業系統的快取)。如果你需要為其它進程保留內存,或者有多個 MongoDB 實例,可以使用 --cacheSizeGB
參數來限制 MongoDB 的快取大小。