我看到MongoDB有一些非常高的非映射虚拟内存使用情况。我可以看到top
和pmap
中的大量虚拟内存告诉我大部分虚拟内存未分配给文件。此外,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。
答案 0 :(得分:1)
我调查并有一些强烈迹象表明该问题与使用rockmongo
有关。我和10gen一起发了一张私人支持票,他们发现问题确实与rockmongo
有关。显然它使用了大量的eval()
调用,这些调用产生了需要大量内存的服务器端V8 javascript引擎。我使用rockmongo
提交了错误报告。