这两天公司的测试服务器崩了,崩的原因很简单:磁盘满了,没有空间了。但是深究后发现原因并非如此。
实际上是:删除文件的进程未释放文件
使用 df -lh
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 7.7G 0 7.7G 0% /dev
tmpfs 7.7G 0 7.7G 0% /dev/shm
tmpfs 7.7G 711M 7.0G 10% /run
tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup
/dev/mapper/cl-root 70G 70G 0G 100% /
/dev/sdb1 916G 31G 839G 4% /data
/dev/mapper/cl-home 851G 243G 608G 29% /home
/dev/sda3 1014M 242M 773M 24% /boot
/dev/sda1 146M 20M 127M 14% /boot/efi
tmpfs 1.6G 1.2M 1.6G 1% /run/user/42
tmpfs 1.6G 4.0K 1.6G 1% /run/user/1009
tmpfs 1.6G 0 1.6G 0% /run/user/0
当时的命令查询后发现
/dev/mapper/cl-root 70G 70G 0G 100% /
这个系统盘已经被用满了,但是通过
du -lh --max-depth=1 /
后发现,统计的文件占用只有9G,实际上有61个G不见了
后来通过百度得知:系统自动删除文件的进程并没有执行,导致文件句柄没有被释放。于是我试了试,
# 查询删除未释放的进程
lsof |grep deleted
# 上述命令得到的结果
lsof -n / |grep deleted
xxxxx 751 root 8r REG 253,0 61G 202150797 /xxxxx/xxxxx (deleted)
果然发现了一个占用非常大的文件,为了方便,直接显示一个,仅作演示,实际请自行查看自己的
于是执行
kill -9 751(上一个命令得到 pid )
然后再次 执行第一个命令,发现空间已经恢复正常大小了。
真是一次奇妙的经历。
评论 (0)