一大波请求扛过去了,快结束时服务异常了,磁盘使用量报警100%,结果是日志清理不及时导致的
首先通过df -h
命令查看,的确是磁盘没有空间了
然后通过执行du -h -d 1 /
命令,发现是/var
文件夹占比最高,最终定位到是docker占用了磁盘空间
首先执行命令docker system prune -a
,清理掉所有无用的容器/镜像,释放部分空间让服务正常运行起来
然后继续分析磁盘占用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| root@ecs-2953:/ 25G ./var/lib/docker/overlay2 72K ./var/lib/docker/buildkit 164K ./var/lib/docker/network 4.0K ./var/lib/docker/runtimes 20K ./var/lib/docker/plugins 4.0K ./var/lib/docker/swarm 4.0K ./var/lib/docker/tmp 85G ./var/lib/docker/containers 20K ./var/lib/docker/builder 4.0K ./var/lib/docker/trust 925M ./var/lib/docker/volumes 50M ./var/lib/docker/image 111G ./var/lib/docker/
root@ecs-2953:/ 37G ./var/lib/docker/containers/bea9e03aae24bb9a049bfcec4e40a57dac2ae6fb8d3891284261d79e758be628 4.8M ./var/lib/docker/containers/f70b809cd9cd00419c78d562f9b4ce23a1c0ab9136c576a9d2de8e1257d4d7da 40K ./var/lib/docker/containers/1c886cc2d39a0de42fff3a3a4c8584072a38ed7a6e3d4bba7de3859e87f2698c 16M ./var/lib/docker/containers/02da9cdf596bae17fa44d085c7da82584da37bc3ba4758486376fc0dc871787b ... 85G ./var/lib/docker/containers/
|
而/var/lib/docker/containers/
中占比最大的是log文件
docker容器日志存在于/var/lib/docker/containers/下以 .json.log
结尾的文件
释放这些日志空间
1 2 3 4
| echo > ./var/lib/docker/containers/bea9e03aae24bb9a049bfcec4e40a57dac2ae6fb8d3891284261d79e758be628/bea9e03aae24bb9a049bfcec4e40a57dac2ae6fb8d3891284261d79e758be628-json.log
|
至此紧急处理释放空间完毕
原因
服务日志是输出到docker的标准输出,然后收集到es中,默认情况下并不会限制其日志大小
压测中并没有开启日志收集,也没有主动清理日志,也没有相关配置,才导致了日志占满了磁盘
解决方法
需要通过配置来限制日志文件的配额
修改docker配置文件
通过vim /etc/docker/daemon.json
,添加
1 2 3 4
| { "log-driver":"json-file", "log-opts": {"max-size":"500m", "max-file":"5"} }
|
然后重启docker,只对新建容器生效
1 2
| systemctl daemon-reload systemctl restart docker
|
其中 max-size表示一个容器日志文件大小上限是500M;max-file表示容器最多有三个日志,id.json、id+1.json。。。以上设置500m*5,2.5G
docker-compose增加配置
需要version 3
1 2 3 4 5 6 7 8 9 10 11
| version: '3' services: service-name: image: image-xxx restart: always logging: driver: "json-file" options: max-size: "100m" max-size: "3"
|
docker run时配置
1 2
| docker run -d --log-opt max-size=1g xxx
|
参考连接
原文链接