我使用的是Mongo-DBv1.8.1.我的服务器内存为4GB,但Mongo-DB的使用量超过3GB.Mongo-DB中是否有内存限制选项?
mik*_*kun 34
如果您运行的是mongodb 3.2+,则可以限制如上所述的wiredTiger缓存.
在wiredTiger添加/etc/mongod.conf部分
...
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
...
Run Code Online (Sandbox Code Playgroud)
这会将缓存大小限制为1Gb,更多信息在docks中
这解决了我的问题,运行ubuntu 16.04和mongoDB 3.2
小智 26
从3.2开始,MongoDB使用WiredTiger作为默认存储引擎.以前的版本使用MMAPv1作为默认存储引擎.
限制wiredTriggered Cache将以下行添加到.config文件:
wiredTigerCacheSizeGB = 1
Jus*_*ins 24
这个问题已被问过几次......
看到这个相关的问题/答案(引用如下)... 如何释放Mongodb使用的缓存?
MongoDB将(至少看起来)耗尽大量可用内存,但它实际上是由操作系统的VMM来告诉它释放内存(请参阅MongoDB文档中的缓存.)
您应该能够通过重新启动MongoDB来释放任何和所有内存.
但是,在某种程度上,MongoDB并没有真正"使用"内存.
例如,从MongoDB文档检查服务器内存使用情况 ...
根据平台的不同,您可能会在过程中将映射的文件视为内存,但这并不严格正确.Unix top可能会显示出比mongod更多的内存.操作系统(特别是虚拟内存管理器,取决于操作系统)管理"内存映射文件"所在的内存.这个数字通常显示在像"free -lmt"这样的程序中.
它被称为"缓存"内存.
MongoDB使用LRU(最近最少使用)缓存算法来确定要发布的"页面",您将在这两个问题中找到更多信息......
rmc*_*rmc 18
您可以使用Linux上的cgroup限制mongod进程使用.
使用cgroups,我们的任务可以通过几个简单的步骤完成.
创建控制组:
cgcreate -g memory:DBLimitedGroup
Run Code Online (Sandbox Code Playgroud)
(确保系统上安装了cgroups二进制文件,请参阅您最喜欢的Linux发行版手册,了解如何执行此操作)
指定该组可用的内存量:
echo 16G > /sys/fs/cgroup/memory/DBLimitedGroup/memory.limit_in_bytes
Run Code Online (Sandbox Code Playgroud)
此命令将内存限制为16G(这对于malloc分配和OS缓存都限制了内存)
现在,删除已经停留在缓存中的页面是个好主意:
sync; echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)最后将服务器分配给创建的控制组:
cgclassify -g memory:DBLimitedGroup \`pidof mongod\`
Run Code Online (Sandbox Code Playgroud)
这会将运行的mongod进程分配给仅受16GB内存限制的组.
source:使用Cgroups限制MySQL和MongoDB内存使用
小智 8
添加到投票最高的答案中,如果您使用的是低内存计算机并且想要配置wiredTigerCache以 MB 为单位而不是整数 GB,请使用此 -
storage:
wiredTiger:
engineConfig:
configString : cache_size=345M
Run Code Online (Sandbox Code Playgroud)
来源 - https://jira.mongodb.org/browse/SERVER-22274
小智 6
mongod --wiredTigerCacheSizeGB 2 xx
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108886 次 |
| 最近记录: |