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

MongoDB连续执行find查询后WiredTiger报磁盘不足崩溃,df查询仍显示15G空闲

WiredTiger 报 No space left on device 但磁盘剩余空间充足的排查方案

WiredTiger 返回错误码 28(ENOSPC)时,df -h 显示磁盘剩余空间充足的场景,可按以下顺序逐项排查根因:

  • inode 资源耗尽
    • 块容量剩余不代表可写,当文件系统的 inode 数量被占满时,哪怕剩余几十G空间,所有新建文件、写入临时文件的操作都会返回 ENOSPC 错误。
    • 排查命令:df -i,重点核对 MongoDB dbpath 所在分区的 IUse% 指标,若达到 100% 即可确认根因。
    • 场景匹配:连续执行无索引覆盖的 find 查询时,WiredTiger 会在数据目录生成大量临时排序小文件,短时间内即可耗尽分区 inode。
  • 磁盘配额限制
    • 若主机对 mongodb 用户、或 /var/lib/mongodb 目录开启了用户/组级磁盘配额,哪怕整个分区剩余空间充足,达到配额上限后仍会报 ENOSPC 错误。
    • 排查命令:
      1. 查看 mongodb 用户的配额限制:quota -u mongodb
      2. 检查分区挂载参数:mount | grep quota,确认挂载是否开启了 usrquota/grpquota 规则。
  • dbpath 挂载点识别错误
    • 若 MongoDB 配置的 dbpath 子目录是单独挂载的小容量分区(如 tmpfs、独立小磁盘),df -h 默认展示的根分区剩余空间没有参考意义,实际 dbpath 所在分区可能已经写满。
    • 排查命令:df -h /var/lib/mongodb,单独核对数据目录所在挂载点的真实容量使用率。
  • 网络文件系统(NFS)元数据缓存偏差
    • 若 dbpath 挂载在 NFS 存储上,NFS 服务端的物理块已经写满,但客户端的块使用缓存未同步更新,会出现客户端 df -h 显示剩余空间充足,实际写入时收到服务端返回的 ENOSPC 错误。
    • 排查方法:在 NFS 服务端对应存储目录执行 df -h 核对真实容量,在客户端执行 echo 3 > /proc/sys/vm/drop_caches 刷新缓存后重新查看剩余空间是否匹配。
  • 已删除文件的句柄占用导致的空间偏差
    • 若 MongoDB 运行期间关联的被删除文件句柄跨挂载点持有,会出现客户端块统计偏差:块设备实际剩余空间已经耗尽,但 df 读取的元数据未更新。
    • 排查命令:lsof -p [mongodb进程ID] | grep deleted,筛选 mongodb 进程关联的已删除未释放文件,累计计算占用空间,若与实际剩余空间偏差较大即可确认根因。

注:日志中报错的 WiredTiger.turtle.set 是 checkpoint 阶段生成的临时元数据文件,单文件大小仅 1KB 左右,只要触发上述任意一种写入限制,哪怕写入几百字节都会触发报错,与日志中“写入1091字节失败”的表现完全匹配。

内容的提问来源于stack exchange,提问作者balu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 15:45:07