mongod 非映射虚拟内存突然翻倍,此后未变

0 mongodb

non-mapped virtual memory我们 mongo 初级的统计数据一直是不变的,在昨天之前我们从未想过它。昨天,一个设计糟糕的查询的一系列意外的全集合扫描导致了很大的减速,该mongod进程使用了​​ 100% 的 CPU,每个查询都需要几十秒。

在将有问题的查询卸载到我们的辅助节点后,性能问题消失了,但非映射虚拟内存增加了一倍多,并且此后一直没有下降。它曾经保持在大约600MB; 现在大约1.4GB. 增长是立竿见影的,并且与放缓完全相关,此后它根本没有改变。

连接数自始至终都是完全恒定的,所以我们可以确定不是这样。

什么可能导致这种情况?这是个问题吗?我们应该担心吗?

在 EC2 实例上的 Ubuntu 12.04 64 位上运行。

eoi*_*zil 6

答案是视情况而定,但这似乎不是问题,如果这是您看到的唯一行为,您不必太担心。

MongoDB 中的存储级别使用内存映射文件,因此使用的总虚拟内存可以是磁盘上所有数据库数据的大小。

系统上的常驻内存将代表 MongoDB 使用的实际工作集,并且根据您的使用/访问模式,它通常会随着时间的推移增长到您主机上的总物理 RAM。操作系统只会在它看到需要时将这些数据分页,否则它会保持原样(它对数据使用最近最少使用/LRU 和最少使用/LFR 方法)。由于 MongoDB 在虚拟内存空间中维护两个常驻内存视图,因此虚拟内存使用量将与此同步增长,其速度是常驻使用率的两倍多一点。

当 MongoDB 重新启动时,它会从头开始,并为您的工作数据集提供一个特定的时间框架,并定期、可预测地使用,您应该可以很好地表示您的工作集大小在 RAM 方面是多少。

MongoDB 的文档包含一些有助于描述它如何使用内存的进一步信息:http : //docs.mongodb.org/manual/faq/storage/#faq-storage-memory-mapped-files

MongoDB 存储层的更深层次的技术视图在这里呈现:http : //www.mongodb.com/presentations/understanding-mongodb-storage-performance-and-data-safety