MongoDB 内存飙升的解决办法
1.问题背景
最近有这么一个需求,需要大批量更新MongoDB 中的一个比较大的表,由于业务需要,在操作时,需要频繁的进行查询和删除新增操作。接口执行后,观察到MongoDB 的占用内存快速飙升,从几十兆直接来到了2个G。
2.问题原因:
MongoDB 会利用操作系统的内存缓存机制来提升性能,尤其是在频繁的读写操作中。这会导致内存占用逐渐增加,直到达到分配的最大内存上限。
3.解决办法:
调整MongoDB 的内存限制,首先你需要找到你的mongo的安装目录,我这里是在本机windows上修改的,我的mongo是4.0,这是我的目录:
D:\soft\MongoDB\Server\4.0\bin\mongod.cfg
然后对这个mongod.cfg做修改,在其中修改storage下的wiredTiger属性如下:
storage:
dbPath: D:\soft\MongoDB\Server\4.0\data
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
上面配置的dpPath和journal不需要动,只需要修改wiredTiger属性即可,设置成功后mongo的内存大小则限制为1G。
4.占用的内存默认分配上限是多少?
有的,但是这个上限较高,如果机器中有其它占用内存的进程,可能导致机器死机。。。
内存的上限计算规则如下:
从MongoDB 3.4开始,默认的WiredTiger内部缓存大小是以下两者中的较大者:
- 50%(RAM-1 GB),或
- 256 MB。
例如,在总共有4GB RAM的系统上,WiredTiger缓存将使用1.5GB RAM()。
相反,总内存为1.25 GB的系统将为WiredTiger缓存分配256 MB,
因为这是总RAM的一半以上减去1 GB。`0.5 * (4 GB - 1 GB) = 1.5 GB``0.5 * (1.25 GB - 1 GB) = 128 MB < 256 MB`
引用链接:
WiredTiger存储引擎内存分配