0%

运行中的mongo减少内存占用

最近查看公司机器的内存占用情况,发现mongod大约占了50%的内存。
命令:ps auxc|head -1;ps auxc|grep -v PID|sort -rn -k +4|head;
原来内存默认使用的是(系统内存-1GB)*50%(据说是3.4版本+)。

这也太坑了,服务器又不是专门用作DB的,还有其他进程也要吃内存。

运行中的mongod,也不敢restart,查询了可能的运行中清理内存。
注意:没有在正式环境中执行过,仅作参考。

方法1(这个应该可以)

关闭所有的数据库:
db.adminCommand({closeAllDatabases: 1})
或者use admin; db.runCommand({closeAllDatabases: 1})

使用crontab定时执行mongo --eval "db.adminCommand({closeAllDatabases: 1})"?也许可以

有新的数据进来的话,会重新开数据库的

方法2(没试过,不知道进程是否会重启)

要安装cgroups,正式环境中没有,没试过,不清楚进程会不会重启

  1. cgcreate -g memory:DBLimitedGroup
  2. echo 16G > /sys/fs/cgroup/memory/DBLimitedGroup/memory.limit_in_bytes
  3. sync; echo 3 > /proc/sys/vm/drop_caches
  4. cgclassify -g memory:DBLimitedGroup $(pidof mongod)

方法3(应该要重启的,没有试过)

mongod.conf增加wiredTigerCacheSizeGB=8,然后mongod reload
或者
/usr/bin/mongod --config /etc/mongod.conf --fork --wiredTigerCacheSizeGB 8

参考文档

  1. https://www.techpaste.com/2016/04/limit-mongodb-memory-usage/
  2. https://www.cnblogs.com/On-my-way/p/9708225.html
  3. https://www.cnblogs.com/wt11/p/9291583.html
  4. https://stackoverflow.com/questions/6861184/is-there-any-option-to-limit-mongodb-memory-usage
  5. https://mongodb-documentation.readthedocs.io/en/latest/reference/command/listDatabases.html#gsc.tab=0
  6. https://segmentfault.com/q/1010000002953588