2013-03-12 139 views
0

有人可以告訴我爲什麼Mongo不會消耗超過300-400MB的內存,當有2GB的可用空間時,dataSize大約是4GB,目前有500萬個文件少於500MB?MongoDB內存消耗低

即使在處理大量文檔的查詢時,內存消耗也不會激增。我在同一臺服務器上運行的其他進程很少,但我在觀看New Relic時,內存消耗不會超過500MB。

在這種情況下不知道它是否重要,但服務器是使用KVM虛擬化的。我們使用64位版本,所以沒有32位限制。

編輯執行cat/proc/meminfo中

MemTotal:  2051488 kB 
MemFree:   205420 kB 
Buffers:   8472 kB 
Cached:   1346496 kB 
SwapCached:  43224 kB 
Active:   1208548 kB 
Inactive:   551952 kB 
Active(anon):  162448 kB 
Inactive(anon): 243196 kB 
Active(file): 1046100 kB 
Inactive(file): 308756 kB 
Unevictable:   0 kB 
Mlocked:    0 kB 
SwapTotal:  4194300 kB 
SwapFree:  4041128 kB 
Dirty:    812 kB 
Writeback:    0 kB 
AnonPages:  397844 kB 
Mapped:   222180 kB 
Shmem:    72 kB 
Slab:    40728 kB 
SReclaimable:  28304 kB 
SUnreclaim:  12424 kB 
KernelStack:  1800 kB 
PageTables:  13832 kB 
NFS_Unstable:   0 kB 
Bounce:    0 kB 
WritebackTmp:   0 kB 
CommitLimit:  5220044 kB 
Committed_AS: 1404372 kB 
VmallocTotal: 34359738367 kB 
VmallocUsed:  9888 kB 
VmallocChunk: 34359728471 kB 
HardwareCorrupted:  0 kB 
AnonHugePages:   0 kB 
HugePages_Total:  0 
HugePages_Free:  0 
HugePages_Rsvd:  0 
HugePages_Surp:  0 
Hugepagesize:  2048 kB 
DirectMap4k:  53228 kB 
DirectMap2M:  2043904 kB 
+0

可能是您的預讀設置:http://www.kchodorow.com/blog/2012/05/10/thursday-5-iagnosing-high-readahead/ – Sammaye 2013-03-12 11:17:30

+0

我調整了readahead,但沒有發現太大的差異。我嘗試了從32到256的不同設置。 – jimmy 2013-03-14 04:20:46

回答

1

如果運行free -mcat /proc/meminfo,你應該能夠看到內存使用情況的明細。

緩衝區涉及使用多少RAM來緩存磁盤塊。緩存與緩存類似,只不過它是從讀取文件中緩存的頁面。

如果它們很高,則表明您的預讀設置太大,MongoDB無法使用剩餘的內存 - 這會降低性能。

+0

緩衝區2和緩存1199.不確定緩存是否高? – jimmy 2013-03-12 12:04:18

+0

你可以貓/ proc/meminfo,所以我們可以得到你的內存使用情況是完整的圖片? – Nick 2013-03-12 14:54:01

+0

已添加到問題中。 – jimmy 2013-03-12 16:02:52