首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB replication WIndows内存问题

MongoDB replication WIndows内存问题
EN

Stack Overflow用户
提问于 2015-03-03 21:39:21
回答 1查看 206关注 0票数 1

我有两台生产服务器运行Windows server 2012 R2。作为主服务器和辅助服务器,它们用于故障转移方案,如果其中一个发生故障,另一个将承担负载。

我的应用程序正在使用MongoDB复制。我有3个实例。主节点和仲裁器(我要将其移动到不同的服务器上,这只是一个临时的资源)和辅助服务器上的辅助节点。

一段时间后,两台服务器上的RAM消耗都会变得非常高。MongoDB占用所有可用的内存,并且不会释放它。我注意到,只有当MongoDB在副本中工作时,才会出现这种行为。

我做了一些研究,发现不可能限制mongod进程本身的RAM使用量。我对MongoDB使用所有内存持怀疑态度。

请分享您的经验、想法或想法,如何在我的windows服务器上限制mongodb进程的RAM使用。

代码语言:javascript
复制
  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
}
EN

回答 1

Stack Overflow用户

发布于 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/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28833258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档