日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mongodb内存管理和使用情况情况查询

發(fā)布時間:2023/12/2 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mongodb内存管理和使用情况情况查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

overview

MongoDB使用的是內(nèi)存映射存儲引擎,即Memory Mapped Storage Engine,簡稱MMAP。MMAP可以把磁盤文件的一部分或全部內(nèi)容直接映射到內(nèi)存,這樣文件中的信息位置就會在內(nèi)存中有對應(yīng)的地址空間,這時對文件的讀寫可以直接用指針來做,而不需要read/write函數(shù)了,但這并不代表將文件map到物理內(nèi)存,只有訪問到這塊數(shù)據(jù)時才會被操作系統(tǒng)以Page的方式換到物理內(nèi)存。MongoDB將內(nèi)存管理工作交給操作系統(tǒng)的虛擬內(nèi)存管理器來完成,這樣就大大簡化了MongoDB的工作,同時操作系統(tǒng)會將數(shù)據(jù)刷新保存到磁盤上,下圖就是MMAP的簡要工作原理圖






?

內(nèi)存使用情況

查看Linux虛擬內(nèi)存管理器是否對內(nèi)存做了限制,如果顯示為unlimited表示無限制

[jiangjianjian@f1-mongo1 ~]$ ulimit -a | grep memory
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
virtual memory (kbytes, -v) unlimited

修改虛擬內(nèi)存限制

[jiangjianjian@f1-mongo1 ~]$ ulimit -m unlimited
[jiangjianjian@f1-mongo1 ~]$ ulimit -v unlimited

查看當前MongoDB的連接數(shù)

?

mongo中每一個連接都是一個線程,需要一個stack,從結(jié)果中可看到當前連接數(shù)為2372,最大連接數(shù)為51200
bj1-farm1:PRIMARY> db.serverStatus().connections
{
"current" : 2372,
"available" : 48828,
"totalCreated" : NumberLong(185449264)
}

Linux下缺省的Stack大小查看

[jiangjianjian@f1-mongo1 ~]$ ulimit -a | grep stack
stack size (kbytes, -s) 10240

MongoDB實際使用的Stack大小查看

?

可以用如下命令確認(單位:K)
[root@f1-mongo1 journal]# cat /proc/$(pidof mongod)/limits | grep stack | awk -F 'size' '{print int($NF)/1024}'
10240
?

調(diào)整stack大小的方法

如果Stack過大,比如上述的10240K,我們可以通過以下命令調(diào)整stack大小
[root@f1-mongo1 journal]# ulimit -s 1024

MongoDB釋放內(nèi)存的命令

mongo> use admin
mongo> db.runCommand({closeAllDatabases:1})

Mongodb自帶命令查看其內(nèi)存使用情況

?

其中resident代表物理內(nèi)存使用情況,單位為M;而virtual為虛擬內(nèi)存使用情況,mapped是映射到內(nèi)存的數(shù)據(jù)大小。這里虛擬內(nèi)存是mapped的兩倍,是因為我們開啟了Journal日志,需要在內(nèi)存中多映射一次,大概就是它的兩倍了。如果關(guān)閉Journal日志,虛擬內(nèi)存大小將和mapped大小相當。
bj1-farm1:PRIMARY> db.serverStatus().mem
{
"bits" : 64,
"resident" : 46662,
"virtual" : 326198,
"supported" : true,
"mapped" : 161399,
"mappedWithJournal" : 322798
}

top命令查看

這里還可以通過top命令觀察mongodb的內(nèi)存使用情況,如下圖,可看到其中的VIRT和RES與上述命令的結(jié)果一樣
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12603 mongod 20 0 318g 45g 44g S 28.0 72.1 27230:21 mongod

free命令查看

而再通過free命令可查看到內(nèi)存占用中有多少是因為數(shù)據(jù)緩存和cache,關(guān)于如何查看free命令,參見http://blog.csdn.net/cug_jiang126com/article/details/42266653
[jiangjianjian@f1-mongo1 ~]$ free
total used free shared buffers cached
Mem: 65921032 65262376 658656 0 274264 61742808
-/+ buffers/cache: 3245304 62675728
Swap: 100663288 11884 100651404

Mongodb內(nèi)存大小配置建議

MongoDB應(yīng)該分配的內(nèi)存大小最好滿足內(nèi)存大小>索引+熱數(shù)據(jù)+連接占用內(nèi)存,通過db.stats()命令可查看到當前 數(shù)據(jù)庫的索引大小情況
bj1-farm1:PRIMARY> db.stats()
{
"db" : "yc_driver", //當前數(shù)據(jù)庫
"collections" : 5, //當前數(shù)據(jù)庫多少表
"objects" : 2911281, //當前數(shù)據(jù)庫所有表多少條數(shù)據(jù)
"avgObjSize" : 240.28991086741541, //每條數(shù)據(jù)的平均大小
"dataSize" : 699551452, //所有數(shù)據(jù)的總大小
"storageSize" : 858513408, //所有數(shù)據(jù)占的磁盤大小
"numExtents" : 21,
"indexes" : 5, //索引數(shù)
"indexSize" : 569229472, //索引大小
"fileSize" : 2080374784, //預(yù)分配給數(shù)據(jù)庫的文件大小
"nsSizeMB" : 16,
"dataFileVersion" : {
"major" : 4,
"minor" : 5
},
"extentFreeList" : {
"num" : 0,
"totalSize" : 0
},
"ok" : 1
}

總結(jié)

以上是生活随笔為你收集整理的Mongodb内存管理和使用情况情况查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。