MEAN栈项目MongoDB频繁崩溃求助:日志写入故障排查
MongoDB周期性崩溃问题解决指南
问题核心分析
你遇到的报错翻译如下:
FileStreamFailed: 无法写入全时诊断数据采集的临时文件缓冲区:/var/lib/mongodb/diagnostic.data/metrics.interim.temp
实际异常类型:mongo::error_details::ExceptionForImpl<(mongo::ErrorCodes::Error)39, mongo::AssertionException>
这个错误说明MongoDB无法向诊断数据临时文件写入数据,核心原因大概率是磁盘空间不足、inode耗尽(文件数量过多)或者诊断目录权限异常——你调整的日志轮转周期只处理了mongod.log,并未覆盖诊断数据目录的文件,所以问题没解决。
分步解决步骤
1. 快速恢复服务
无需删除mongod.log,直接清理诊断数据目录后重启:
# 停止MongoDB服务 sudo systemctl stop mongod # 清空诊断数据目录下的所有文件 sudo rm -rf /var/lib/mongodb/diagnostic.data/* # 重启服务 sudo systemctl start mongod
2. 排查磁盘资源问题
先确认磁盘空间和inode使用情况:
# 查看磁盘总占用率 df -h # 查看inode使用(避免文件过多导致无法创建新文件) df -i # 查看诊断数据目录的大小和文件数量 du -sh /var/lib/mongodb/diagnostic.data/ ls -l /var/lib/mongodb/diagnostic.data/ | wc -l
- 如果磁盘空间不足:扩展Linode实例磁盘容量,或清理系统内大文件(如旧日志、缓存)
- 如果inode耗尽:通过定时任务定期清理诊断数据目录的历史文件(见步骤4)
3. 修复目录权限
检查并修复诊断数据目录的读写权限,确保MongoDB进程(通常是mongodb用户)拥有权限:
# 查看目录权限 ls -ld /var/lib/mongodb/diagnostic.data/ # 修正权限(如果不对) sudo chown -R mongodb:mongodb /var/lib/mongodb/diagnostic.data/ sudo chmod -R 700 /var/lib/mongodb/diagnostic.data/
4. 配置自动清理诊断数据
MongoDB不会自动清理diagnostic.data目录的文件,添加定时任务定期清理:
# 编辑定时任务 sudo crontab -e # 添加每天凌晨2点清理的任务(按需调整时间) 0 2 * * * sudo rm -rf /var/lib/mongodb/diagnostic.data/* > /dev/null 2>&1
5. 优化诊断数据采集配置
修改MongoDB配置文件/etc/mongod.conf,限制诊断数据的占用空间:
diagnosticDataCollection: enabled: true # 单个诊断文件最大大小(MB) maxSizeMB: 100 # 保留的诊断文件数量 maxFiles: 5
修改后重启服务:
sudo systemctl restart mongod
后续监控
建议添加磁盘空间监控,比如用htop实时查看,或写简单脚本在磁盘使用率超过80%时触发告警,避免再次出现同样问题。
内容的提问来源于stack exchange,提问作者Dewaldt
相关产品推荐
相关产品推荐

