Mongodb 新版本的内存问题

Memory issues with new version of Mongodb

我在 Windows 服务器 2012 上使用 Mongodb 已经两年多了。自上次更新以来,一些奇怪的问题开始发生,最终导致整个 RAM 内存的使用。

我为Mongodb配置的服务如下:

logpath=d:\data\log\mongod.log 
dbpath=d:\data\db
storageEngine=wiredTiger
rest=true

#override port
port=27017

#configsvr = true
shardsvr = true

为了限制缓存内存的使用,我添加了以下行:

wiredTigerCacheSizeGB=10

这就是奇怪的事情开始发生的地方。当我检查任务管理器时,它说现在 Mongodb 实际上被限制为 10GB,正如我在服务中定义的那样,但它实际上使用的空间远远超过 10GB。

在第一张图片中,您可以看到按 RAM 消耗排序的内存消耗

而实际上我使用的机器总共有28GB

这种疯狂的消耗导致我 运行ning 的脚本失败,即使是最基本的脚本,即使我只 运行 简单的查询,如 'count' 或 'distinct',我认为这是内存消耗的直接结果。

当我检查日志文件时,我看到有许多打开的连接,即使在会话结束时它也表明仍然打开了相同数量的连接:

所以最后我有两个主要问题: 1.有没有办法不降级Mongodb版本就可以解决这个问题? 2.配置文件看起来对吗?一切都是必要的吗?

WiredTiger中的内存使用是二级缓存:

  • 首先是由 --wiredTigerCacheSizeGB
  • 控制的 WiredTiger 缓存
  • 其次是操作系统文件系统缓存。 MongoDB 自动使用 WiredTiger 缓存或其他进程未使用的所有空闲内存

另见 WiredTiger memory usage

对于 OS 文件系统缓存,MongoDB 不管理它直接使用的内存 - 它让 OS 管理它。 Windows 如果可以的话,将尝试使用最后一块物理内存——但如果其他进程请求内存,很多物理内存应该并且将会被丢弃。

另一种方法是在容器(例如 lxc、cgroups、Docker 等)中 运行 mongod,该容器无法访问容器中所有可用的 RAM系统.

综上所述:

  • 您还在服务器中 运行 连接另一个数据库,即 mysqld。 MongoDB,像一些数据库会在专用服务器上表现更好,以减少内存争用。

  • 任务管理器显示 mongod 正在使用 10GB,尽管机器最多使用了 ~28GB。这可能是也可能不是 mongod,因为您还有其他进程。

有用的资源: