一次容器长时间运行引发的磁盘容量告警及解决方法
一、问题背景及描述
由于需要做一些性能测试,故在虚拟机上批量运行了100台容器,然后对这100台容器服务不停的发数据,并由其转发至测试服务。
但是每当测试一段时间后,机器硬盘容量就达到告警上限,查看后系统硬盘使用率达到85%以上
二、排查过程
1、首先在根目录下定位占用最大的目录:
cd /;du -sh *
2、依次在目录下使用du -sh * 命令,最终发现是/var/lib/docker/containers里面每一个容器对应的目录占用过多导致
3、进入容器查看每个容器实际使用的量,以确定容器内是否有文件不断增长
docker exec -it 容器名称 bash
cd /;du -sh # 容器的总占用大小
结果发现容器使用量并不多,且并没有持续增长稳健
4、在容器宿主机执行以下命令后,确定容器内实际占用容量实际并不多
docker system df
5、继续探索/var/lib/docker/containers/容器名/下各文件大小,发现“容器id-json.log”文件比较大
6、打开文件后发现,该文件是容器日志
tailf -n 300 filename
三、解决方法
1、设置全局容器日志大小:
打开/etc/docker/daemon.json(若不存在请直接新建),并添加配置参数log-dirver和log-opts
其中log-dirver指文件格式,log-opts指文件相关的配置,下图配置表示每个日志文件最大为10m,最多保留3个日志文件(由于本人容器较多,故参数设置较小)
重启docker服务生效:
systemctl daemon-reload
systemctl restart docker
注意,此参数为docker全局配置,如果机器上存在他人的容器,建议只对自己管理的容器进行日志配置.
由于本人是使用的docker-compose来管理的容器,故介绍第二种方法
2、使用docker-compose对指定容器进行日志配置,如下红色框中,指此容器最多保留10m的日志
配置完成后重启容器
docker-compose restart