天天看點

mongodb的記憶體總結

純手打,隻是總結了通過多種方式檢視mongodb的記憶體使用情況,并沒能提出有效的減少mongodb的記憶體的方法。

都說mongodb吃記憶體比較厲害,确實很厲害,我的資料級别到達了 4千萬,資料量大概是140G,幾天下來的話,130G的記憶體盤,到了60%,沒有找到很好的辦法前,每次都是重新開機mongodb,新手,我也不太清楚這個資料量是處于一個怎樣的位置,有怎樣的優良的解決辦法,知道的麻煩告知一下,跪謝。

為啥這麼吃記憶體呢,mongodb使用的是記憶體映射存儲引擎,即Memory Mapped Storage Engine,簡稱MMAP,MMAP可以把磁盤檔案的一部分或全部内容直接映射到記憶體,這樣檔案中的資訊位置就會在記憶體中有對應的位址空間,把磁盤IO操作轉換成記憶體操作,

但壞處是你沒有方法很友善的控制MongoDB占多大記憶體,事實上MongoDB會占用所有能用的記憶體,是以最好不要把别的服務和MongoDB放一起。之是以會有這個總結,就是因為曾經将web服務與mongodb放在一起,導緻負載間歇性的劇增,web服務直接被伺服器自動重新開機了,當然這是後話。

如果想知道mongodb的記憶體使用情況,可以有一些幾個操作:

top

<a href="http://s3.51cto.com/wyfs02/M01/7B/59/wKiom1bMIF6ibvzZAAA12zDMeao710.png" target="_blank"></a>

shift+m,如果不出意外的話,mongodb應該居于首位了,

VIRT:虛拟記憶體

RES:實際使用記憶體

%MEM:記憶體使用比

剛重新開機過,記憶體占用還不算多

2.mongostat

<a href="http://s5.51cto.com/wyfs02/M02/7B/59/wKioL1bMIyuzQCyFAABI-UKDuKs771.png" target="_blank"></a>

mapped:映射到記憶體的資料大小,

vsize:虛拟記憶體,是mapped的2倍

res: 實際使用的記憶體,如果res經常突然下降,去查查是否有别的程式狂吃記憶體

conn:目前的連接配接數

這裡的vsize,res與top的一緻,conn如果一直都很高的話,也是有問題的,lockedb如果很高的話(經常超過),說明有問題很大了,曾經因為很多python腳本規定時間跑不完,導緻連接配接一個接着一個,最終lockdb到了50% 

3.db.stats()

<a href="http://s1.51cto.com/wyfs02/M01/7B/5A/wKioL1bMKNWhWlp4AAAiC6o21ms338.png" target="_blank"></a>

db:目前資料庫

collections:目前資料多少張表

objects:目前資料庫所有表多少條資料

dataSize:所有資料的總大小

storageSize:所有資料占的磁盤大小

indexes:索引數

indexSize:索引大小

fileSize:預配置設定給資料庫的檔案大小

其實這個并不能說顯示記憶體的什麼情況,隻能說能顯示整個資料庫的一個狀态status

4.db.serverStatus()

<a href="http://s1.51cto.com/wyfs02/M00/7B/5B/wKioL1bMK1KTkGGqAABEE5vuWf8819.png" target="_blank"></a>

這個指令在單獨的個别db中,并不能顯示出任何結果,需要在admin 這個db中才有效,測試可以看到很多資訊顯示,如connections,current為目前的連接配接,available為可用的連接配接

我們常用的話,不會顯示這麼多的資訊,一般需要什麼就顯示什麼。如記憶體使用情況

5.db.serverStatus().mem

<a href="http://s1.51cto.com/wyfs02/M00/7B/5C/wKioL1bMLIeSuykvAAAPMe1ELvc677.png" target="_blank"></a>

virtual:虛拟記憶體的大小

mapped:映射到記憶體的資料大小

這裡虛拟記憶體是mapped的兩倍,是因為我們開啟了Journal日志,需要在記憶體中多映射一次,大概就是它的兩倍了。如果關閉Journal日志,虛拟記憶體大小将和mapped大小相當

我常用的大概就是top和mongostat,每次看到記憶體比較大的時候,采用的辦法就是重新開機服務,但是這并不能解決問題,隻是暫緩問題,有解決辦法的麻煩告知一聲,跪謝。

      本文轉自布拉君君 51CTO部落格,原文連結http://blog.51cto.com/5148737/1744408:,如需轉載請自行聯系原作者