df 与 du 输出磁盘使用情况不一致

五点多醒了,一看手机,收到了一堆网站磁盘告警信息,显示磁盘的占用情况82%,85%,…92%(每半个小时报警一次)。

赶快打开电脑,登上服务器,查看磁盘占用情况。
df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   36G   4G  92% /

sudo du -h -x --max-depth=1 /

28G    /tmp

发现磁盘挂载点/下的/tmp/目录的磁盘使用量突然升高了。下面又数千个类似下面的文件,然后为了接下来分析原因就将这些文件移动到了其他目录下。

-rw-r--r-- 1 root root 7168 Jul 11 05:42 /tmp/cachegrind.out.8268
-rw-r--r-- 1 root root 7174 Jul 11 05:45 /tmp/cachegrind.out.8852
-rw-r--r-- 1 root root 7179 Jul 11 05:45 /tmp/cachegrind.out.8863

移动完后,磁盘的占用情况降下来了,总算不再报警了。(磁盘占用情况高于80%会触发报警)
df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   28G   11G  73% /
devtmpfs        7.8G     0  7.8G   0% /dev
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           7.8G  1.5M  7.8G   1% /run
tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/vdb1       2.0T  843G  1.1T  45% /data
tmpfs           1.6G     0  1.6G   0% /run/user/0
tmpfs           1.6G     0  1.6G   0% /run/user/1001
tmpfs           1.6G     0  1.6G   0% /run/user/1002

sudo du -h -x --max-depth=1 /

1.4M    /tmp
138M    /root
4.8M    /opt
4.0K    /media
2.2G    /var
362M    /srv
233M    /etc
207M    /home
4.0K    /mnt
176M    /boot
2.7G    /usr
16K     /lost+found
6.0G    /

但是另外一个问题出现了,发现dfdh输出的 /占用情况并不一致。
不一致是dfdh再计算磁盘使用情况有些区别。

由于文件描述符的原因, 应用程序正在使用的文件是可以被移动或删除,因为这些文件描述符在 proc filesystem 中仍旧是打开的。
这些文件描述符仍打开的文件是会被 df统计的,但是不会被 du 统计。 Why do “df” and “du” commands show different disk usage?

使用lsof | grep '(deleted)'查看上面已经被删除的文件。


mysqld     9419  9440   mysql   11u      REG              253,1          0     528185 /var/tmp/ibBAVemN (deleted)
mysqld     9419  9440   mysql   15u      REG              253,1          0     528186 /var/tmp/ibAOIAAG (deleted)
mysqld     9419  9449   mysql    8u      REG              253,1          0     528182 /var/tmp/ibDYMqGe (deleted)
mysqld     9419  9449   mysql    9u      REG              253,1          0     528183 /var/tmp/ibgSNVP7 (deleted)
mysqld     9419  9449   mysql   10u      REG              253,1          0     528184 /var/tmp/ib3b2qZ0 (deleted)
mysqld     9419  9449   mysql   11u      REG              253,1          0     528185 /var/tmp/ibBAVemN (deleted)
mysqld     9419  9449   mysql   15u      REG              253,1          0     528186 /var/tmp/ibAOIAAG (deleted)
php       15240          root    3w      REG              253,1 7273961987     429422 /tmp/cachegrind.out.19714 (deleted)
php       15240          root    7w      REG              253,1 5924639750     429424 /tmp/cachegrind.out.19725 (deleted)
php       15240          root   12wW     REG              253,1  881868346     401811 /tmp/cachegrind.out.15240 (deleted)

通过上面的PID,可以定位到是哪个进程仍在使用

ps -aef | grep 15257

root     15257 19724  0 Jul10 ?        00:03:43 /etc/opt/remi/php73/bin/php artisan horizon:work

杀掉上面的进程 kill -9 15257就可以收回打开的文件占用的空间。

磁盘占用过多的问题解决了,下面就该去定位问题产生的原因了…

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值