前因:最近同事需要打包在测试环境中打包nextjs,老是跟我说内存空间满了,编译不了,按道理说,上面也没装有几个容器,40GB的Linux系统空间怎么会被占满了呢,趁着有时间,来排查一下。
- 使用指令
df -h查看系统空间使用情况
- 使用
docker system df指令查看docker占用空间
再次使用指令docker system df -v 查看具体的占用情况
-
例行使用指令
docker system prune -a清除了部分无效的空间,不使用的镜像,但是发现只释放了一小部分的空间。好吧,聊胜于无了。 -
接下来,通过
du -s /* | sort -nr命令查看哪一个目录占用的空间最多
发现/var目录占用的空间是最多的,刚好在35G左右,和上面的已使用的空间对上来了,看来问题就在这里面
- 那么现在使用指令
cd var进入到var目录下,使用指令du -h --max-depth=1查看当前目录下文件夹大小情况
- 是
lib目录占用了33G的空间,继续使用指令cd lib进入到lib目录下,使用指令du -h --max-depth=1查看当前目录下文件夹大小情况
- 没想到还是docker占用的空间,继续使用指令
cd docker进入到docker目录下,使用指令du -h --max-depth=1查看当前目录下文件夹大小情况
- 可以看到是
containers目录占用了空间,但是我们在第二步看到containers只占用了三百多兆的空间,怎么会这么大呢。这个先不管了,我们继续使用指令cd containers进入到containers目录下,使用指令du -h --max-depth=1查看当前目录下文件夹大小情况
- 看来是某一个容器占用了这么大的空间,继续使用指令
cd 7c097b74df75268d55ad5f0c458da5b8f0cc45fe0df3932ec54c4b3462ecc4c9进入到7c097b74df75268d55ad5f0c458da5b8f0cc45fe0df3932ec54c4b3462ecc4c9目录下,使用指令du -h --max-depth=1查看当前目录下文件夹大小情况
- 真相了,是一个-json.log文件占用了28G的空间,看来是docker生成的日志文件,那么就是需要清除此文件,释放空间了。
处理方案:
- 直接删除该文件,但因为该文件在docker运行时有程序占用,因此可能无法清除。所以需要重启docker,把容器停止后删除。
- 使用
cat /dev/null > *-json.log命令进行清除,这样不需要重启docker,只是把该文件的内容清空。
需要注意的是:上面的解决方案只是暂时的,清除之后,docker依旧会继续产生日志,所以下次还需继续清除。
- 使用第二种方案,使用指令
cat /dev/null > *-json.log清空内容后,再次执行指令df -h查看系统空间使用情况