我正在测试 MongoDB 的档案数据。我们有一个包含 1.6 亿行的集合。MongoDB 实例在 12 Gb 的物理内存盒上占用 76.2 Gb 的虚拟内存 ;-) 交换为空。
我读到虚拟内存=物理内存+交换内存。
我的情况出了什么问题?这是 mongoDB 本身的问题吗?
谢谢
答案1
MongoDB 使用内存映射文件 - 这可能比机器上实际可用的物理内存(或交换空间)大得多。因此,使用的总虚拟内存通常等于当时磁盘上所有数据的大小。
常驻内存将是表示实际使用的工作集的统计数据,但根据机器上的资源和使用模式,常驻内存会随着时间的推移而增长,并接近主机上的总物理 RAM。基本上,除非操作系统认为需要分页旧数据(内存压力),否则它将保留在 RAM 中。
当您重新启动 MongoDB 时,这基本上是从头开始的。因此,如果您知道实际工作数据集的时间范围(例如,您只使用过去 7 天的数据),那么该时间段之后的数据集大小(假设使用情况正常且可预测)将代表您的工作集在 RAM 方面的近似大小。
更多信息请参阅此处的文档:
http://www.mongodb.org/display/DOCS/Caching
http://www.mongodb.org/display/DOCS/Checking+Server+Memory+Usage
最后,MMS(免费)可以很好地为您绘制出随时间变化的统计数据 - 映射、虚拟、常驻和非映射以及许多其他统计数据(在每个图表上查找“i”以获取解释)。