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

Docker Swarm节点磁盘异常增长问题排查求助

磁盘异常增长的可能原因与排查方法

可能的原因

  • 已删除但未释放的文件句柄:容器内进程打开大文件后未关闭句柄,随后删除文件。此时文件已从目录树移除(du无法检测),但磁盘空间仍被占用,直到进程终止或关闭句柄。重启容器后进程退出,空间才被释放。
  • Docker日志驱动未配置轮转:若容器持续输出大量日志,且日志驱动(如json-file)未设置max-size/max-file等轮转参数,日志文件会持续膨胀。部分场景下日志文件可能被Docker进程持有,常规目录扫描无法及时捕获其大小变化。
  • Overlay2文件系统写层泄漏:容器运行时,写层(overlay2的diff目录)中可能存在大量临时文件,这些文件虽被容器内进程删除,但因容器未停止,Overlay2未清理这些已标记为删除的文件,导致主机磁盘占用持续增加。
  • 容器进程的临时文件泄漏:容器可能通过未配置tmpfs的临时路径(如/tmp)写入大量临时文件,这些文件属于容器写层,但因文件被频繁创建删除,du扫描时无法捕捉到峰值大小。

进一步排查方法

  • 定位未释放的文件句柄
    1. 通过docker inspect my_app.1.ptgimdvy081y48tbv2f8mjqvp获取容器的PID(查找State.Pid字段)。
    2. 执行lsof -p <容器PID> | grep deleted,查看该进程持有的已删除文件,确认是否存在大文件占用空间。
  • 实时监控磁盘写入行为
    • 使用iotop -oP筛选出持续写磁盘的进程,关联到容器对应的PID,定位写入来源。
    • 用pidstat -d 1每隔1秒输出进程磁盘I/O统计,观察是否有稳定的高写入量进程。
  • 检查Docker日志配置
    1. 执行docker inspect my_app查看HostConfig.LogConfig字段,确认日志驱动类型及参数。
    2. 若使用json-file驱动,检查是否配置了max-size和max-file;若使用journald,执行journalctl --disk-usage查看日志占用,并检查/etc/systemd/journald.conf中的清理策略。
  • 分析Overlay2写层占用
    1. 进入/var/lib/docker/overlay2目录,执行find . -type f -size +100M查找大文件。
    2. 用du -shc */diff统计每个容器写层的实际大小,对比docker system df -v的输出是否存在差异。
  • 跟踪容器进程的文件操作
    • 执行strace -p <容器PID> -e open,unlink,write,实时监控进程的文件打开、删除和写入操作,直接定位大文件的创建路径和内容。
  • 监控容器文件描述符
    • 定期执行docker stats --no-stream --format "{{.Name}} {{.FileDescriptors}}",若文件描述符数量持续增长,说明存在句柄泄漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:50:04