用于mongodb的高度非映射虚拟内存

时间:2013-07-04 08:37:56

标签: mongodb memory-management

我看到MongoDB有一些非常高的非映射虚拟内存使用情况。我可以看到toppmap中的大量虚拟内存告诉我大部分虚拟内存未分配给文件。此外,MMS通过显示大量未映射的虚拟内存来确认这一点。

图的MMS描述说明了以下关于非映射虚拟内存的信息:

  

如果此数字非常高(多千兆字节),则表示文件的内存映射之外的其他方面正在使用过多的内存 - 这将是错误/次优的。对于非映射使用大量内存的最常见情况是与数据库的连接非常多。每个连接都有一个线程堆栈,这些堆栈的内存可以相加很多。保持此统计数据合理地低是很重要的,因为此处使用的内存不可用于缓存。

所以现在我想知道我在这里看到的数量是否不合理,是否实际上是一个问题,或者它是否正常。金额可以在图片中看到,但我也会在这里用文字解释,以防万一。

我的数据库大小约为12.5GB。驻留内存使用量为11GB,映射为18GB,虚拟内存为118GB。与db的连接数量约为50(在40到60之间移动),因此这似乎不是原因。

值得注意的是,我在pmap输出中看到了很多与此类似的条目:

0000013f9dfff000 521296K -----    [ anon ]
000001439e400000   1024K -----    [ anon ]
000001439e500000   1024K rw---    [ anon ]
000001439e600000   2048K -----    [ anon ]
000001537ce33000    820K -----    [ anon ]
000001537cf00000     20K rw---    [ anon ]
000001537cf05000      4K -----    [ anon ]
000001537cf06000    996K rwx--    [ anon ]
000001537cfff000      4K -----    [ anon ]
000001537d000000     20K rw---    [ anon ]
000001537d005000      4K -----    [ anon ]
000001537d006000    996K rwx--    [ anon ]

特别是大约0.5GB的第一个条目似乎过多了。我看到它经常回来,根据一些贪图,159次。这样就可以解释我所看到的大部分金额。我不知道这些条目来自哪里。

我在CentOS 6.4(64位)上使用MongoDB v2.4.1。

MMS screenshot

1 个答案:

答案 0 :(得分:1)

我调查并有一些强烈迹象表明该问题与使用rockmongo有关。我和10gen一起发了一张私人支持票,他们发现问题确实与rockmongo有关。显然它使用了大量的eval()调用,这些调用产生了需要大量内存的服务器端V8 javascript引擎。我使用rockmongo提交了错误报告。