mongo版本升级解决占有内存过大的问题

前言

自己有一个测试用的服务器,配置很低。年前出现几次问题,重启后就好了也就没注意。后来越来越频繁就调查了一下,发现重启后内存就一直增长直到接近100%。使用ps aux查看cpu和内存使用情况,发现mongo占用了大部分的内存,这是什么情况?

版本差异

3.2版本

因为服务器搭建有些年头了,mongo的版本一致没升级,停留在3.2版本上。查阅相关资料发现是默认设置导致的,mongo3.2有一段官方描述如下:
在这里插入图片描述

简单来说就是内存占用在下面两种情况中取最大值:

  • RAM的60%,并且这个60%要大于1GB

  • 1GB

因为我的服务器是测试用,所以配置很低内存只有1GB,也就是说mongo默认就要全占了,怪不得内存一直100%。

但是mongo配置是可以改动的,有两种方式。

一种是修改mongod.conf文件,设置cacheSizeGB参数:

...
storage:
    dbPath: /var/lib/mongodb
    journal:
    enabled: true

    wiredTiger:
        engineConfig:
             cacheSizeGB: xx
...             

另外一种就是如果使用命令启动,那么启动时可以添加参数:

–wiredTigerCacheSizeGB=xx

但是!

mongo的3.2版本这个cacheSizeGB参数是int类型,如果使用小数就会报错
Error parsing option “wiredTigerCacheSizeGB” as int: Bad digit “.” while parsing 0.3

所以最低只能是1GB!这样我这种低配服务器就没戏了。。。

3.4版本

应该是官方也意思到这个问题了,所以在mongo的3.4版本做了改变,官方描述如下:
在这里插入图片描述

可以看到,在这个版本中cacheSizeGB类型变成float了,也就是说可以用小数了。

而且默认配置也发生了改变:

  • 50%的RAM,同样要求这50%大于1GB

  • 256M

简单来说就是如果RAM大于2GB,就取50%。否则就直接使用256M,而且我们自定义的时候可以使用小数,这样就非常合理了。

升级版本

所以要解决这个问题,需要先将mongo升级到3.4及以上版本。mongo不能跨版本升级,所以只能3.2先升级到3.4,再往上升级。

目前3.4足够我使用,所以升级到3.4就可以了。但是网上升级都比较复杂,因为都是大系统,而我只是一个小系统,单一的服务和数据库。所以网上的文章基本没有,我参考了一些和官网的一些,总结了简单的升级过程。

文章中的系统环境是CentOS

停止服务

通过命令mongo进入数据库,然后

 use admin;                    --使用管理员数据库
 db.shutdownServer();

下载安装

因为是在CentOS上,所以参考官网redhat的安装教程

需要先创建一个/etc/yum.repos.d/mongodb-org-3.4.repo文件,内容如下:

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

然后用命令安装即可

sudo yum install -y mongodb-org

安装完执行命令mongo --version

发现mongo对应的bin文件都自动变成3.4版本的了,很简单

重新启动

通过conf文件或命令直接重启即可,因为bin文件自动换了,所以没有任何改变

我一般用命令进行启动:
/usr/bin/mongod -dbpath=/mnt/mongo -logpath=/mnt/mongodb/mongodb.log -logappend -port=27017 -fork --maxConns=20000 --bind_ip=127.0.0.1 --wiredTigerCacheSizeGB=0.2

向后不兼容

启动这个功能后如果需要降级会麻烦一些,但是我们基本上不可能再降级回去了,所以直接启动即可

首先通过mongo进入数据库中,然后查看当前的featureCompatibilityVersion

db.adminCommand({getParameter:1,featureCompatibilityVersion:1})

可以看到版本是3.2,我们需要改成3.4即可,执行命令

db.adminCommand ({setFeatureCompatibilityVersion:“3.4”})

执行成功后可以再查一次,修改成功即可

通过上面简单的几个步骤,我们就将3.2成功升级到3.4了

总结

首先,上面提到的版本升级方法只适用单一服务的简单数据库,像那种集群中使用的数据库就不要参考了。

当版本在3.4以上就可以通过上面提到的两种方式修改内存配置即可:

  • 修改mongod.conf文件,重启mongo

  • 使用命令启动mongo的同时添加wiredTigerCacheSizeGB参数

这样在低配置的机器上也不会占用全部内存了。

至于如何安装配置mongo,可以参考:
《Mac和Linux安装Mongodb教程》
《windows下安装配置mongodb》

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BennuCTech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值