欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MongoDB 內(nèi)存使用情況分析

 更新時(shí)間:2013年07月10日 11:36:14   作者:  
都說 MongoDB 是個(gè)內(nèi)存大戶,但是怎么知道它到底用了多少內(nèi)存呢

MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫。由C++語言編寫。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。

MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是他支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。

先 ps 一下看看。

復(fù)制代碼 代碼如下:

$ ps aux|grep mongod
mongo    26994  9.0 20.0 797264324 13243052 ?  Sl   May16 117:03 /path/to/mongodb/bin/mongod

總共 760G 多的虛擬內(nèi)存,但是物理內(nèi)存就只有 12.6G 。這個(gè)機(jī)器可是有 64G 內(nèi)存的哦,這看起來 MongoDB 完全沒用多少內(nèi)存嘛。

再看看 free 的結(jié)果。

復(fù)制代碼 代碼如下:

$ free -m
             total       used       free     shared    buffers     cached
Mem:         64544      64279        265          0        134      60413
-/+ buffers/cache:       3731      60813
Swap:        31999          0      31999

內(nèi)存倒是占得差不多了,基本都是 cached ,也就是文件系統(tǒng)緩存。MongoDB 是通過 mmap 方式讓操作系統(tǒng)來處理持久化和緩存的。每個(gè)數(shù)據(jù)文件都直接映射到某個(gè)虛擬內(nèi)存地址。訪問的時(shí)候如果這一頁不在內(nèi)存中,系統(tǒng)就會(huì)嘗試把這一頁加載進(jìn)來。這些內(nèi)存都是算進(jìn) cache 里的。在 mongodb 的官方文檔里有這樣一個(gè)說法,top 或 ps 里的 RSIZE 段顯示的是機(jī)器的全部?jī)?nèi)存大小,因?yàn)?mongodb 會(huì)盡可能占用全部?jī)?nèi)存。但是事實(shí)上,這些緩存并沒有算在里面。因此在 top 或 ps 中是看不出 MongoDB 的實(shí)際內(nèi)存使用情況的。而 free 雖然可以看到系統(tǒng)的內(nèi)存使用情況,但是沒法確定這些內(nèi)存里究竟有多少真的是 MongoDB 使用的。

還好有人做了 vmtouch 這個(gè)工具。可以檢查文件在緩存中的情況,另外也可以把文件直接加載進(jìn)緩存或者踢出去。只需要對(duì) MongoDB 的所有數(shù)據(jù)文件檢查一下緩存加載情況,就可以知道 MongoDB 到底緩存了多少數(shù)據(jù)了。

復(fù)制代碼 代碼如下:

$ vmtouch -m4G /path/to/mongodb/data/
           Files: 256
     Directories: 3
  Resident Pages: 15465901/100219772  58G/382G  15.4%
         Elapsed: 4.072 seconds

這里 -m4G 是 vmtouch 檢查的文件大小限制。MongoDB 的數(shù)據(jù)文件比較大,通常會(huì)超過默認(rèn)的 500M。這樣看來,緩存用了 58G,這還差不多。Resident Pages 左側(cè)的數(shù)字是頁的數(shù)量,頁的數(shù)量乘以文件系統(tǒng)頁大小才是內(nèi)存使用量。頁的大小可以通過

復(fù)制代碼 代碼如下:

getconf PAGESIZE

查看,通常是 4096,也就是 4KB。

MongoDB 在 NUMA 的機(jī)器上運(yùn)行,并且內(nèi)存被固定到一個(gè) node 的時(shí)候,會(huì)有一個(gè)警告

復(fù)制代碼 代碼如下:

WARNING: You are running on a NUMA machine.
We suggest launching mongod like this to avoid performance problems:
numactl –interleave=all mongod [other options]

也許是認(rèn)為,這種情況下只能用上一個(gè)節(jié)點(diǎn)的內(nèi)存。但 MongoDB 的緩存是由操作系統(tǒng)管理的。NUMA 似乎對(duì)此并沒有影響。而內(nèi)存不太小的時(shí)候 MongoDB 本身很難用掉一個(gè)節(jié)點(diǎn)的內(nèi)存。這種情況下,是否開啟 numactl –interleave=all 作用已經(jīng)不大了。能做的也許只能是加內(nèi)存,sharding,或者換 ssd 了。

出處:http://xiezhenye.com/2013/05/mongodb-%e5%86%85%e5%ad%98%e4%bd%bf%e7%94%a8.html

相關(guān)文章

最新評(píng)論