我在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
为了限制Cache内存的使用,我们增加了以下一行:
wiredTigerCacheSizeGB=10
这就是奇怪的东西开始发生的地方。当我检查任务管理器时,它说现在Mongodb实际上限制为10GB,因为我在服务中定义但它实际上使用了超过10GB。
在第一张图片中,您可以看到按RAM消耗排序的内存消耗
这种疯狂的消费导致我正在运行的脚本失败,即使是最基本的脚本,即使我只运行简单的查询,例如' count'或者' distinct',我相信这是内存消耗的直接结果。
当我检查日志文件时,我看到有许多打开的连接,即使会话结束,也表明仍然打开了相同数量的连接:
所以最后我有两个主要问题: 1.有没有办法在不降级Mongodb版本的情况下解决这个问题? 2.配置文件看起来正确吗?是有必要的一切吗?
答案 0 :(得分:2)
WiredTiger中的内存使用情况是一个两级缓存:
--wiredTigerCacheSizeGB
对于OS文件系统缓存,MongoDB不管理它直接使用的内存 - 它允许操作系统管理它。如果可以的话,Windows将尝试使用每一个物理内存的最后一块 - 但是如果其他进程请求内存,它将会被抛出并且将被抛出。
另一种方法是在容器(例如lxc,cgroups,Docker等)中运行mongod
,该容器无法访问系统中可用的所有RAM。
说了上面的话:
您还在服务器中运行另一个数据库,即mysqld
。与某些数据库一样,MongoDB在专用服务器上的性能会更好,以减少内存争用。
任务管理器显示mongod
正在使用10GB,尽管该机器最多使用~28GB。这可能是mongod
,也可能不是val1
,因为您也有其他流程。
有用的资源: