溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mongodb的內(nèi)存總結(jié)

發(fā)布時(shí)間:2020-07-06 05:23:29 來源:網(wǎng)絡(luò) 閱讀:8841 作者:布拉君君 欄目:MongoDB數(shù)據(jù)庫

純手打,只是總結(jié)了通過多種方式查看mongodb的內(nèi)存使用情況,并沒能提出有效的減少mongodb的內(nèi)存的方法。


都說mongodb吃內(nèi)存比較厲害,確實(shí)很厲害,我的數(shù)據(jù)級(jí)別到達(dá)了 4千萬,數(shù)據(jù)量大概是140G,幾天下來的話,130G的內(nèi)存盤,到了60%,沒有找到很好的辦法前,每次都是重啟mongodb,新手,我也不太清楚這個(gè)數(shù)據(jù)量是處于一個(gè)怎樣的位置,有怎樣的優(yōu)良的解決辦法,知道的麻煩告知一下,跪謝。


為啥這么吃內(nèi)存呢,mongodb使用的是內(nèi)存映射存儲(chǔ)引擎,即Memory Mapped Storage Engine,簡(jiǎn)稱MMAP,MMAP可以把磁盤文件的一部分或全部?jī)?nèi)容直接映射到內(nèi)存,這樣文件中的信息位置就會(huì)在內(nèi)存中有對(duì)應(yīng)的地址空間,把磁盤IO操作轉(zhuǎn)換成內(nèi)存操作,

但壞處是你沒有方法很方便的控制MongoDB占多大內(nèi)存,事實(shí)上MongoDB會(huì)占用所有能用的內(nèi)存,所以最好不要把別的服務(wù)和MongoDB放一起。之所以會(huì)有這個(gè)總結(jié),就是因?yàn)樵?jīng)將web服務(wù)與mongodb放在一起,導(dǎo)致負(fù)載間歇性的劇增,web服務(wù)直接被服務(wù)器自動(dòng)重啟了,當(dāng)然這是后話。


如果想知道m(xù)ongodb的內(nèi)存使用情況,可以有一些幾個(gè)操作:

  1. top

mongodb的內(nèi)存總結(jié)

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

VIRT:虛擬內(nèi)存

RES:實(shí)際使用內(nèi)存

%MEM:內(nèi)存使用比

剛重啟過,內(nèi)存占用還不算多



2.mongostat

mongodb的內(nèi)存總結(jié)

mapped:映射到內(nèi)存的數(shù)據(jù)大小,

vsize:虛擬內(nèi)存,是mapped的2倍

res: 實(shí)際使用的內(nèi)存,如果res經(jīng)常突然下降,去查查是否有別的程序狂吃內(nèi)存

conn:當(dāng)前的連接數(shù)

這里的vsize,res與top的一致,conn如果一直都很高的話,也是有問題的,lockedb如果很高的話(經(jīng)常超過),說明有問題很大了,曾經(jīng)因?yàn)楹芏鄍ython腳本規(guī)定時(shí)間跑不完,導(dǎo)致連接一個(gè)接著一個(gè),最終lockdb到了50% 


3.db.stats()

mongodb的內(nèi)存總結(jié)

db:當(dāng)前數(shù)據(jù)庫

collections:當(dāng)前數(shù)據(jù)多少張表

objects:當(dāng)前數(shù)據(jù)庫所有表多少條數(shù)據(jù)

dataSize:所有數(shù)據(jù)的總大小

storageSize:所有數(shù)據(jù)占的磁盤大小

indexes:索引數(shù)

indexSize:索引大小

fileSize:預(yù)分配給數(shù)據(jù)庫的文件大小


其實(shí)這個(gè)并不能說顯示內(nèi)存的什么情況,只能說能顯示整個(gè)數(shù)據(jù)庫的一個(gè)狀態(tài)status



4.db.serverStatus()

mongodb的內(nèi)存總結(jié)



這個(gè)命令在單獨(dú)的個(gè)別db中,并不能顯示出任何結(jié)果,需要在admin 這個(gè)db中才有效,測(cè)試可以看到很多信息顯示,如connections,current為當(dāng)前的連接,available為可用的連接

我們常用的話,不會(huì)顯示這么多的信息,一般需要什么就顯示什么。如內(nèi)存使用情況


5.db.serverStatus().mem

mongodb的內(nèi)存總結(jié)

virtual:虛擬內(nèi)存的大小

mapped:映射到內(nèi)存的數(shù)據(jù)大小


這里虛擬內(nèi)存是mapped的兩倍,是因?yàn)槲覀冮_啟了Journal日志,需要在內(nèi)存中多映射一次,大概就是它的兩倍了。如果關(guān)閉Journal日志,虛擬內(nèi)存大小將和mapped大小相當(dāng)


我常用的大概就是top和mongostat,每次看到內(nèi)存比較大的時(shí)候,采用的辦法就是重啟服務(wù),但是這并不能解決問題,只是暫緩問題,有解決辦法的麻煩告知一聲,跪謝。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI