我在 Google Cloud 中的 CentOS 主机上运行了一个 Ubuntu docker。docker 运行一个用于将图像上传到 S3 的 spring-boot 应用程序。我没有在本地磁盘上保存任何内容。大约每 2 周,我就会遇到磁盘空间问题(设备上没有剩余空间)。我在主机上运行以下命令:
[james@api /]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 1.0T 58G 967G 6% /
devtmpfs 15G 0 15G 0% /dev
tmpfs 15G 0 15G 0% /dev/shm
tmpfs 15G 26M 15G 1% /run
tmpfs 15G 0 15G 0% /sys/fs/cgroup
tmpfs 3.0G 0 3.0G 0% /run/user/0
tmpfs 3.0G 0 3.0G 0% /run/user/1000
[james@api /]$ sudo du -hs * | sort -rh | head -5
3.3G var
1.5G usr
154M boot
58M srv
34M etc
我在docker容器上运行了同样的操作:
[root@ea23811c1871 /]# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 1.0T 58G 966G 6% /
tmpfs 64M 0 64M 0% /dev
tmpfs 15G 0 15G 0% /sys/fs/cgroup
/dev/sda1 1.0T 58G 966G 6% /var/log
shm 64M 0 64M 0% /dev/shm
tmpfs 15G 0 15G 0% /proc/acpi
tmpfs 15G 0 15G 0% /proc/scsi
tmpfs 15G 0 15G 0% /sys/firmware
[root@ea23811c1871 /]# du -hs * | sort -rh | head -5
1.2G usr
139M var
2.7M etc
36K tmp
28K root
我的问题是,我如何才能找到 58G 隐藏在哪里?
谢谢,Hanan
答案1
在主机运行lsof 并查看已删除的文件
lsof |grep delete
可能进程没有释放已删除的文件
答案2
首先,如果还没有这样做,请设置磁盘空间使用情况的监视器和警报。Nagios/Icinga 有一些易于设置的通用插件,甚至一个简单的脚本在磁盘已满时提醒您也会很有帮助。
然后,您应该通过 docker 命令检查容器占用了多少空间(查看docker ps -s
,docker system df
或者docker inspect
——在运行这些命令之前仔细阅读手册页)。您还需要考虑容器、检查点(如果使用)和日志文件的配置文件用户占用的空间。通常,四处查看/var/lib/docker/
以了解哪些文件位于容器中的哪个位置。