一,排查过程
1,free -h 查看swap使用情况
2,利用TOP查看显示swap分区高占用,并查看各个进程占用swap使用情况
在top命令的输出中,按f键进入字段管理界面,
然后添加SWAP列(如果它还没有被选中)。之后,你可以看到每个进程的swap使用情况
操作:按空格 前面变成星 然后esc推出来
查看那个进程的swap高
ps -ef | grep 18428
3,查看Mongo的读写情况
grep cacheSizeGB /usr/local/mongocluster/etc/mongod_* #查看配置文件
查看MongoD中的cacheSizeGB大小,发现cachesize占用低。
二,故障原因
高占用 swap 资源的原因 是当前配置的 cacheSizeGB 过低,导致数据处理速度无法跟上数据的生成速率。未及时处理的数据被积压在系统的 buffer cache 中,从而占用了大量的物理内存。 当物理内存使用量达到一定阈值时,系统将开始使用 swap 空间。这种情况不仅影响系统的性能,还可能导致响应时间的延迟。因此,建议增加 cacheSizeGB 以提升数据处理能力,从而减少对 swap 的依赖,优化物理内存的使用效率。
三,解决方案
解决方法:增加mongo集群的cacheSizeGB和关闭swap
以下为操作步骤:
1,增加mongo集群的cacheSizeGB
配置修改
步骤一:进入每台mongo服务器上分别修改下面4个配置文件
将以下3个配置文件中cacheSizeGB值从6改为18
vi /mongocluster/etc/mongod_27021.conf
步骤二:修改该/usr/local/mongocluster/etc/mongod_cs.conf 配置文件中的cacheSizeGB大小
将以下配置文件中cacheSizeGB值从4改为12
vi /usr/local/mongocluster/etc/mongod_cs.conf
重启mongocluster服务
步骤一:重新启动每台Mongo服务器的mongocluser服务
注意这里要一台一台重启 不要三台一起执行,每台执行命令完毕后再到下一台mongo服务器执行重启
/etc/init.d/mongocluser restart
步骤二:之后启动每台Mongo服务器的mongos服务
/etc/init.d/mongos restart
2,关闭swap分区
查看当前swap空间情况
swapon --show
关闭swap空间
注意:执行速度较慢,后台需要释放swap才能关闭,所以要多等会
swapoff -a
关闭后再次查看当前swap空间情况,确认关闭完成
swapon --show