Docker容器内进程持续占用已轮转日志文件导致磁盘空间异常占用问题求助
Docker容器内进程持有已删除日志文件引发磁盘空间异常占用问题
环境背景
- Docker版本:该问题在Docker 18、19、20的多个小版本中均有出现,当前线上运行的稳定版本为
19.03.12和20.10.3 - 操作系统:覆盖Ubuntu 16.04/18.04/20.04全版本,所有系统均采用
overlay2存储驱动,且都出现了相同现象
问题详情
- 执行命令
lsof | grep -i 'deleted'时,发现Docker容器内运行的进程仍持有已被删除的日志文件句柄 - 通过
ps -aef --forest过滤PID可确认,这些持有无效句柄的进程确实运行在容器内部 - 将相同进程在容器外部署运行时,暂未复现该问题
- 问题最初是在磁盘被莫名占用数十GB后才引起关注的
- 受影响的进程包括两类:使用logback的Java进程、使用winston的Node.js进程——这些日志库均自行处理日志轮转,未依赖独立的logrotate服务
求助需求
我目前完全搞不懂这个现象的成因,尤其疑惑为什么非容器化运行时就不会出现这个问题。搜索关键词docker logrotate files being held后,得到的结果全是关于Docker自身日志轮转的内容,根本找不到对应此问题的解决方案。
有没有朋友遇到过类似的情况?能否帮忙识别问题根源,或者提供一个简易的修复方案?
内容的提问来源于stack exchange,提问作者KoenDG
相关产品推荐
相关产品推荐

