我看到 MongoDB 的非映射虚拟内存使用率非常高。我可以看到大量的虚拟内存,top
并pmap
告诉我其中大部分没有分配给文件。此外MMS
,通过显示大量未映射的虚拟内存来证实这一点。
该MMS
图的描述说明了关于非映射虚拟内存的以下内容:
如果这个数字非常高(数 GB),则表明除了文件的内存映射之外的其他方面正在使用过多的内存——这将是坏的/次优的。对非映射使用大量内存的最常见情况是与数据库的连接非常多。每个连接都有一个线程堆栈,这些堆栈的内存可以加起来相当大。由于此处使用的内存不可用于缓存,因此保持此统计数据合理低非常重要。
所以现在我想知道我在这里看到的数量是否不合理,如果它真的是一个问题,或者它是否很好。金额可以在图像中看到,但我也会在此处以文字形式解释它们,以防万一。
我的数据库大小约为 12.5GB。常驻内存使用量为 11GB,映射为 18GB,虚拟内存使用量高达 118GB。与数据库的连接数量约为 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 的第一个条目似乎过多。我经常看到它回来,根据一些 grepping 的 159 次。所以这可以解释我看到的大部分金额。我不知道这些条目是从哪里来的。
我在 CentOS 6.4(64 位)上使用 MongoDB v2.4.1。