1. 程式人生 > >關於mongodb佔用記憶體過大的問題

關於mongodb佔用記憶體過大的問題

一、現象

        最近發現自己伺服器記憶體越來越少,查了一下原來是部署的mongodb使用記憶體線上性增加。不查不知道,一查嚇一跳,竟然佔用了3G的記憶體。。

二、分析

     1.記憶體增加的原因

               mongo為了優化他的讀寫效率,將記憶體當做快取,所以你讀寫次數越多,快取就越大。預設值:

               從3.4開始,WiredTiger內部快取預設使用較大的一個:

  • 50%(RAM - 1 GB),或
  • 256 MB。

               例如,我是8G記憶體,那麼最大快取0.5*(8-1)=3.5G,看到了麼。。。mongo預設3.5G都是他的快取。

     2.cacheSizeGB的介紹

storage.wiredTiger. engineConfig.cacheSizeGB

wiredtiger將使用所有資料的最大快取大小,wiredTiger快取工作集(working set)資料的記憶體大小,單位:GB,此值決定了wiredTiger與mmapv1的記憶體模型不同,它可以限制mongod對記憶體的使用量,而mmapv1則不能(依賴於系統級的mmap)。預設情況下,cacheSizeGB的值為假定當前節點只部署一個mongod例項,在MongoDB 3,預設情況下,wiredtiger快取,使用1 GB或安裝的實體記憶體的一半,以較大者為準。如果當前節點部署了多個mongod程序,那麼需要合理配置此值。如果mongod部署在虛擬容器中(比如,lxc,cgroups,Docker)等,它將不能使用整個系統的實體記憶體,則需要適當調整此值。預設值為實體記憶體的一半。

三、解決方案

      修改(增加)cacheSizeGB配置。

      配置如下:

  engine: wiredTiger
#  mmapv1:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1