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