记一次华为云ECS Docker容器日志占满系统盘导致No space left on device排查与log-opts轮转配

举报
yd_233909394 发表于 2026/10/29 10:02:20 2026/10/29
【摘要】 今天线上告警突然弹了报警,华为云ECS根分区使用率达到100%,导致业务服务直接报 No space left on device 异常,连常规命令补全和日志写入都受阻。紧急登上去排查,过程如下: 1. 定位空间占用首先执行 df -h 查看磁盘占用情况:df -h发现系统盘 / 使用率达到了 100%。接着排查大文件,由于部署了较多 Docker 容器,优先怀疑是容器 stdout 日志没...

今天线上告警突然弹了报警,华为云ECS根分区使用率达到100%,导致业务服务直接报 No space left on device 异常,连常规命令补全和日志写入都受阻。

紧急登上去排查,过程如下:

1. 定位空间占用

首先执行 df -h 查看磁盘占用情况:

df -h

发现系统盘 / 使用率达到了 100%。

接着排查大文件,由于部署了较多 Docker 容器,优先怀疑是容器 stdout 日志没限制被刷爆了。执行以下命令排查 top 5 大日志文件:

du -sh /var/lib/docker/containers/*/*-json.log | sort -rh | head -n 5

果然看到某个微服务容器的 json.log 独占了几十个G,直接把系统盘塞满了。

2. 踩坑与应急释放

第一次遇到这种情况的新人容易直接执行 rm -rf 删除日志文件,但这会踩大坑!
如果容器进程还在运行且持有着该文件句柄,直接 rm 只是删除了目录项,文件句柄未释放(可以通过 lsof | grep deleted 查看到对应的 deleted 状态文件),磁盘空间根本不会释放!

正确的应急清空方式是使用 truncate 原地清空,保留文件句柄:

truncate -s 0 /var/lib/docker/containers/*/*-json.log

执行后再看 df -h,系统盘使用率瞬间降了下来,业务恢复正常。

3. 根治方案:配置 Docker 日志轮转 (log-opts)

为了避免后续再次出现容器日志无限刷爆磁盘的情况,需要修改 /etc/docker/daemon.json 全局限制每个容器日志的大小和文件数量。

完整 /etc/docker/daemon.json 配置如下:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

配置修改后,重启 Docker 服务生效:

systemctl daemon-reload
systemctl restart docker

这样每个容器的日志单文件最大 100MB,最多保留 3 个历史文件,从源头上彻底解决了容器日志暴涨导致磁盘满的问题。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。