1. 問(wèn)題
- 在使用 MongoDB 過(guò)程中褪测,會(huì)遇到 內(nèi)存占用隨著數(shù)據(jù)操作而線性增加 的情況滞磺;
- 如果數(shù)據(jù)持續(xù)的大量寫入的話,會(huì)大量占用服務(wù)器內(nèi)存意述,出現(xiàn) OOM 問(wèn)題,在服務(wù)器內(nèi)存保護(hù)機(jī)制作用下吮蛹,MongoDB 會(huì)被 kill 掉荤崇。
2. 原因
- mongo為了優(yōu)化他的讀寫效率,將內(nèi)存當(dāng)做緩存潮针,所以讀寫次數(shù)越多术荤,緩存就越大;
- 在MongoDB 3 版本以后每篷,默認(rèn)情況下瓣戚,緩存默認(rèn)使用1 GB或安裝的物理內(nèi)存的一半端圈,以較大者為準(zhǔn);
- 如果服務(wù)器物理內(nèi)存位 32G子库,那 MongoDB 默認(rèn)的緩存空間就是 16G舱权,如果服務(wù)器有其他應(yīng)用也會(huì)大量占用內(nèi)存,很可能會(huì)導(dǎo)致服務(wù)器內(nèi)存不足仑嗅。
3 解決方案
- 修改(增加)cacheSizeGB配置:
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
#dbPath: /mongodata
journal:
enabled: true
# engine:
mmapv1:
smallFiles: true
wiredTiger:
engineConfig:
configString : cache_size=512M