最近查看公司机器的内存占用情况,发现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
,正式环境中没有,没试过,不清楚进程会不会重启
cgcreate -g memory:DBLimitedGroup
echo 16G > /sys/fs/cgroup/memory/DBLimitedGroup/memory.limit_in_bytes
sync; echo 3 > /proc/sys/vm/drop_caches
cgclassify -g memory:DBLimitedGroup $(pidof mongod)
方法3(应该要重启的,没有试过)
mongod.conf
增加wiredTigerCacheSizeGB=8
,然后mongod reload
或者/usr/bin/mongod --config /etc/mongod.conf --fork --wiredTigerCacheSizeGB 8
参考文档
- https://www.techpaste.com/2016/04/limit-mongodb-memory-usage/
- https://www.cnblogs.com/On-my-way/p/9708225.html
- https://www.cnblogs.com/wt11/p/9291583.html
- https://stackoverflow.com/questions/6861184/is-there-any-option-to-limit-mongodb-memory-usage
- https://mongodb-documentation.readthedocs.io/en/latest/reference/command/listDatabases.html#gsc.tab=0
- https://segmentfault.com/q/1010000002953588