我有两台生产服务器运行Windows server 2012 R2。作为主服务器和辅助服务器,它们用于故障转移方案,如果其中一个发生故障,另一个将承担负载。
我的应用程序正在使用MongoDB复制。我有3个实例。主节点和仲裁器(我要将其移动到不同的服务器上,这只是一个临时的资源)和辅助服务器上的辅助节点。
一段时间后,两台服务器上的RAM消耗都会变得非常高。MongoDB占用所有可用的内存,并且不会释放它。我注意到,只有当MongoDB在副本中工作时,才会出现这种行为。
我做了一些研究,发现不可能限制mongod进程本身的RAM使用量。我对MongoDB使用所有内存持怀疑态度。
请分享您的经验、想法或想法,如何在我的windows服务器上限制mongodb进程的RAM使用。
rs.status()"set": "XXXXXX",
"date": ISODate("2015-03-03T13:35:39.000Z"),
"myState": 1,
"members": [
{
"_id": 1,
"name": "Server1:3000",
"health": 1,
"state": 1,
"stateStr": "PRIMARY",
"uptime": 67557,
"optime": Timestamp(1425389739,
19),
"optimeDate": ISODate("2015-03-03T13:35:39.000Z"),
"electionTime": Timestamp(1425322202,
1),
"electionDate": ISODate("2015-03-02T18:50:02.000Z"),
"self": true
},
{
"_id": 2,
"name": "Abritrer1:3001",
"health": 1,
"state": 7,
"stateStr": "ARBITER",
"uptime": 67547,
"lastHeartbeat": ISODate("2015-03-03T13:35:38.000Z"),
"lastHeartbeatRecv": ISODate("2015-03-03T13:35:39.000Z"),
"pingMs": 0
},
{
"_id": 3,
"name": "Server2:3000",
"health": 1,
"state": 2,
"stateStr": "SECONDARY",
"uptime": 67542,
"optime": Timestamp(1425389737,
26),
"optimeDate": ISODate("2015-03-03T13:35:37.000Z"),
"lastHeartbeat": ISODate("2015-03-03T13:35:37.000Z"),
"lastHeartbeatRecv": ISODate("2015-03-03T13:35:38.000Z"),
"pingMs": 1,
"syncingTo": "Server1:3000"
}
],
"ok": 1
}发布于 2015-03-03 21:47:18
正是出于这个原因,我们在生产环境中不再使用MongoDB。强迫Mongo放弃内存并不容易,而将Mongo自身限制在一定的内存限制也同样令人尴尬。
如果你使用的是Windows Server 2012,你可以安装Windows系统资源管理器,它应该允许你固定Mongo进程的最大工作集大小,尽管我自己还没有尝试过。
您可能会发现以下博客文章对将进程限制为特定大小很有用。
http://blogs.technet.com/b/clinth/archive/2012/10/11/can-a-process-be-limited-on-how-much-physical-memory-it-uses.aspx
除非您使用的是Windows Server计算机,否则我不确定您可以使用哪些其他工具进行更改,但是限制操作系统分配的最大工作集的方法似乎是最好的方法。
祝好运!
编辑-作为一个想法,如果你的集合中有很多数据,Mongo内存使用率总是会很高,但这并不总是意味着内存被使用了。与Java和C#为垃圾收集分配内存的方式类似,Mongo将最近较少使用的页面标记为可回收。如果另一个进程请求内存,Mongo应该释放一些较少使用的页面来提供空间。当你看到Mongo占用了超过3 3Gb的系统内存时,这有点令人担忧,但这并不总是像看起来那么严重的问题。
作为测试,您可以尝试在Mongo使用率达到峰值时启动一个需要大量内存的应用程序,并查看它是否释放了一些内存。如果是这样的话,你可以简单地让Mongo来处理它认为合适的内存使用情况(虽然在你的位置上,我更愿意看看什么是空闲内存,什么不是)。
Mongo FAQ中关于内存映射文件的部分对此进行了一些说明。http://docs.mongodb.org/manual/faq/storage/
https://stackoverflow.com/questions/28833258
复制相似问题