MongoDB版本升级耗时久,如何解决文件句柄无法释放引发的服务异常?
MongoDB文件句柄异常问题排查与尝试方案
背景
每2个月,MongoDB服务器会因大量无法释放的文件句柄出现异常,导致访问缓慢,必须重启。经排查,MongoDB 3.6版本的close_idle_time参数值为100000,释放文件句柄约需28小时;而4.4版本将该参数调整为600(即10分钟)。因此计划通过升级MongoDB版本,避免文件句柄无法释放引发的服务异常。
图表说明
图表展示的是打开的文件句柄数量,低谷对应周末时段。
环境信息
硬件
- 3台物理服务器,配置为56核、256GB内存
- MongoDB数据分区采用4块1.92T SSD磁盘组成RAID10
MongoDB部署
采用3节点主从ReplicaSet集群,版本为3.6.20
数据详情
单个MongoDB实例包含2个数据库:
- DB1:90000个集合,占用460GB磁盘空间,包含91540个集合wt文件和183081个索引wt文件
- DB2:819500个集合,占用170GB磁盘空间,包含835215个集合wt文件和1670452个索引wt文件
尝试方案及问题
方案1:升级MongoDB版本
参考文件句柄相关技术文章,计划通过升级版本解决文件句柄过多无法释放的问题。
结果:由于数据文件数量过于庞大,单实例数据文件升级耗时过长,业务无法接受,升级失败。
方案2:升级前删除历史数据
计划删除50%的历史数据后再进行升级。
问题:删除数据后磁盘空间未释放,MongoDB仅将数据标记为已删除但不实际释放;尝试使用compact命令释放空间,该操作需要更多磁盘和内存资源,且执行速度极慢,耗时远超预期,此方案不可行。
内容的提问来源于stack exchange,提问作者lephix
相关产品推荐
相关产品推荐

