1. 程式人生 > >mongodb 內存分析

mongodb 內存分析

linux mongo 內存 mem

要想了解mongo的內存機制就要先了解linux系統的內存分析。

第一步:先看看linux的內存參數都是怎麽說的

             total       used       free     shared    buffers     cached
Mem:         11912       9045       2866          0         90       3406
-/+ buffers/cache:       5549       6363 
Swap:         2047         14       2033

total:物理內存總大小

used:使用了多少

free:剩余多少

buffers:buffers是指高速緩沖區的大小,是一個空間大小的概念,運行程序常用的數據,在第一次運行

時系統會把它們暫時緩存在一個高速的存儲區域,以後再用時就直接從這個區域讀取數據供程

序使用,存取這些數據的介質,因其讀寫速度比硬盤和內存要快得多,所以,buffers的大小對

電腦運行速度的影響是很大的,但這些數據重啟電腦或關機後就會自動消失。

cached:cached是指緩存的數據,是真正意義上的實在東西,例如你常用的程序,由於一些數據是這些

程序運行經常要使用到的,系統就會把它們形成文件,緩存到一個特定的位置,下次你再運行

該程序時,就會自動到緩存的位置讀取數據供程序運行使用,存儲這些數據的區域是在電腦的

硬盤上,理論上講讀寫速度是不變的,只是節省了尋找這些數據的時間而也,這樣也可間接地

提高了電腦的運行效率。

Swap:當物理內存不夠使用的是,系統會在物理硬盤上切割一塊空間,當作內存使用。


linux主機的真正可用內存是:真正可用內存=total-used-buffers-cached

系統中顯示的used是包括buffers和cached大小的,但是這兩個數據是可以被釋放的,所以真正使用了多少是:真正使用了的內存=used-buffers-cached



第二步:系統內存說的差不多了,那麽我們來看看mongo的內存是怎麽和系統配合的。

首先說mongo是一個比較坑但又叫人特別爽的數據庫,為什麽說坑“是因為它不釋放內存,你有100G的內存它也會給你吃滿”;為什麽說他爽“是因為它把數據放到內存中,所以100w的數據查詢會很快”;

那麽怎麽來判定mongo機器給的內存是否合理呢?下面給出公式:物理內存>mongo索引數據+mongo的熱數據


還可以通過mongostat命令來監控MongoDB的內存使用情況,如下所示:

shell> mongostat
mapped vsize res faults
 940g 1893g 21.9g 0

其中內存相關字段的含義是:

mapped:映射到內存的數據大小

visze:占用的虛擬內存大小

res:占用的物理內存大小

註:如果操作不能在內存中完成,結果faults列的數值不會是0,視大小可能有性能問題。

在上面的結果中,vsize是mapped的兩倍,而mapped等於數據文件的大小,所以說vsize是數據文件的兩倍,之所以會這樣,是因為本例中,MongoDB開啟了journal,需要在內存裏多映射一次數據文件,如果關閉journal,則vsize和mapped大致相當。


參考文檔:http://www.ttlsa.com/mongodb/mongodb-and-memory/

本文出自 “學習改變命運” 博客,請務必保留此出處http://xinsir.blog.51cto.com/5038915/1960750

mongodb 內存分析