关于Mongodb占用内存处理办法_CKJSHOP
关于Mongodb占用内存处理办法

问题描述:服务器可用内存越来越少,导致部分服务(例如mysql服务)自动停止,商城打不开。


原因:MongoDB使用的是内存映射存储引擎,它会把磁盘IO操作转换成内存操作,如果是读操作,内存中的数据起到缓存的作用,如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性能。但坏处是没有方法很方便的控制MongoDB占多大内存,事实上MongoDB会占用所有能用的内存,所以最好不要把别的服务和MongoDB放一起。而且根据官方文档可知,一个mongod实例几乎要占用服务器一半以上的内存,mongodb缺内存就会跟OS要,多了也不会还。


解决办法:

方法一(不推荐):

重启mongod,或者调用 db.runCommand({closeAllDatabases:1})来清除内存

 

方法二(推荐):

使用Linux命令清除缓存中的数据:echo 3 > /proc/sys/vm/drop_caches

将以上命令加入计划任务中,每三个小时执行一次。

 

1)在宝塔面板添加计划任务方法:

关于Mongodb占用内存处理办法(图1) 

 

2)直接在服务器添加计划任务方法:

执行命令:crontab   -e

添加内容:* */3 * * * echo 3 > /proc/sys/vm/drop_caches  > /dev/null

关于Mongodb占用内存处理办法(图2) 

方法三(推荐):使用云Mongodb(迁移本地Mongodb到云Mongodb)

(1)修改本地Mongodb启动绑定的地址,允许外网访问。

关于Mongodb占用内存处理办法(图3) 

设置完成后重启Mongodb服务。

(2)服务器安全组和防火墙开放Mongodb服务端口。

 

 关于Mongodb占用内存处理办法(图4)

 

(3)在云Mongodb设置ip白名单,登录云Mongodb创建数据库、用户、密码

(4)使用navicat登录服务器的Mongodb导出数据库;

(5)使用navicat登录云Mongodb导入备份;

(6)修改CKJSHOP/common/config/main-local.php中mongodb链接信息;

(7)修改CKJSHOP_client/CKJSHOP_client.ini中mongodb链接信息;

(8)重启CKJSHOP_client,执行pkill -9 CKJSHOP



返回顶部