1. 問題
- 在使用 MongoDB 過程中,會遇到 內存占用隨著數據操作而線性增加 的情況;
- 如果數據持續的大量寫入的話,會大量占用服務器內存,出現 OOM 問題,在服務器內存保護機制作用下,MongoDB 會被 kill 掉。
2. 原因
- mongo為了優化他的讀寫效率,將內存當做緩存,所以讀寫次數越多,緩存就越大;
- 在MongoDB 3 版本以后,默認情況下,緩存默認使用1 GB或安裝的物理內存的一半,以較大者為準;
- 如果服務器物理內存位 32G,那 MongoDB 默認的緩存空間就是 16G,如果服務器有其他應用也會大量占用內存,很可能會導致服務器內存不足。
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