VPS磁盘空间分析&Docker日志文件清理
1.使用指令查看系统空间使用情况
df -h
可以看到,40GB的空间已经被使用了36G了,就剩下2.2G,根本没法使用。
2.使用指令查看docker占用空间docker system df
可以看到,docker占用的空间也不大,合起来都没有2G
3.再次使用指令查看具体的占用情况docker system df -v
看起来也没有太多无效的镜像
4.例行使用指令清除了部分无效的空间,不使用的镜像,但是发现只释放了一小部分的空间。
docker system prune -a
5.接下来,通过命令查看哪一个目录占用的空间最多
du -s /* | sort -nr
发现/var
目录占用的空间是最多的,刚好在35G左右,和上面的已使用的空间对上来了,看来问题就在这里面
6.那么现在使用指令进入到var
目录下
cd var
7.使用指令查看当前目录下文件夹大小情况
du -h --max-depth=1
是lib目录占用了33G的空间。
8.继续使用反复使用指令cd lib
进入到lib目录下,使用指令du -h --max-depth=1
查看当前目录下文件夹大小情况
9.最终是一个-json.log文件占用了28G的空间,看来是docker生成的日志文件,那么就是需要清除此文件,释放空间了。
处理方案:
1.直接删除该文件,但因为该文件在docker运行时有程序占用,因此可能无法清除。所以需要重启docker,把容器停止后删除。
2.使用cat /dev/null > *-json.log
命令进行清除,这样不需要重启docker,只是把该文件的内容清空。
需要注意的是:上面的解决方案只是暂时的,清除之后,docker依旧会继续产生日志,所以下次还需继续清除。
查看docker日志文件的方法
docker logs -f 容器ID/容器名
在linux上,一般docker的日志文件存储在/var/lib/docker/containers/container_id/ 目录下的 各个容器ID对应的目录下的*-json.log 文件中
方法1:可以直接进入该目录下,查找日志文件
方法2:可以写一个脚本文件,执行即可
创建docker_log_size.sh文件
#!/bin/sh
echo "======== docker containers logs file size ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
ls -lh $log
done
为该文件设置权限
chmod +x docker_log_size.sh
执行该文件
./docker_log_size.sh
设置Docker容器日志文件大小限制
1.新建/etc/docker/daemon.json
,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:
# vim /etc/docker/daemon.json
{
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}
max-size=500m,意味着一个容器日志大小上限是500M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。
2.然后重启docker的守护线程
命令如下:
systemctl daemon-reload
systemctl restart docker
【需要注意的是:设置的日志大小规则,只对新建的容器有效】