【问题标题】:Memory issues with new version of Mongodb新版MongoDB的内存问题
【发布时间】:2016-08-14 10:45:00
【问题描述】:

我在 Windows server 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

这种疯狂的消耗导致我正在运行的脚本失败,即使是最基本的脚本,即使我只运行像'count'或'distinct'这样的简单查询,我相信这是内存的直接结果消耗。

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

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

【问题讨论】:

  • 当您包含新的连接发现并更改问题时,您应该打开一个新问题,而不是更改您的问题并取消接受答案。 1)您需要指定涉及的MongoDB版本。即从版本升级。关于连接,它是一个连接池,您需要包括打开连接的方式。即驱动程序语言和版本。 2) 见Config Options。取决于您的部署用例,您很可能不需要shardsvrrest

标签: mongodb server windows-services windows-server-2012 production-environment


【解决方案1】:

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

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

另见WiredTiger memory usage

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

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

说了这么多:

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

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

有用的资源:

【讨论】:

    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多