You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:10:20