Dockerd 进程CPU high 100% 原因排查
现象说明
线上主机不知道操作了什么,收到了监控cpu load 告警。排查dockerd进程在作怪.
排查过程
- 排查容器的内存、cpu均正常.
- 收到故障,运维思想,先恢复生产。优雅的重启dockerd进程,不影响container运行. 具体参考:
- 查到dockerd进程的cpu利用率很高.
- 根据监控查看具体什么时候cpu涨起来的.
- 查看syslog 开始时间的历史操作记录
- 发下当时使用了docker logs 查看日志
- 怀疑触发docker了什么bug.(version: v18.0.32)
- 搜索docker logs cpu high 字眼,发现确实有类似情况。
- 网络资料显示,xxx-json.log 文件破坏
- 使用file/stat 命令查看xxx-json.log 文件,显示为data, 非text类型.
- 查看为什么xxx-json.log文件会被损坏?
原因/结论
最后排查是因为docker-compose文件中写了logging-driver max-size:500M 来滚动日志,但是在维护过程中,也写了定时任务去清理xxx-json.log文件(echo > ) 导致文件损坏了。
docker logs 读已损坏的日志文件,可能触发dockerd cpu high的问题。
dockerd v20.0.xx 版本后对日志驱动做过修复,可能不存在这个问题了。(未验证)