![如何确定哪个进程正在耗尽所有可用磁盘空间?](https://linux22.com/image/111997/%E5%A6%82%E4%BD%95%E7%A1%AE%E5%AE%9A%E5%93%AA%E4%B8%AA%E8%BF%9B%E7%A8%8B%E6%AD%A3%E5%9C%A8%E8%80%97%E5%B0%BD%E6%89%80%E6%9C%89%E5%8F%AF%E7%94%A8%E7%A3%81%E7%9B%98%E7%A9%BA%E9%97%B4%EF%BC%9F.png)
突然间,所有可用磁盘空间都/
消失了。
如果我在磁盘中腾出空间(例如,通过删除约 50GB 的内容),几分钟后我将回到 0 可用磁盘空间(根据df
)。
显然,某些进程正在快速消耗磁盘空间,但我不知道它是什么。
不过有一点是肯定的:不管是什么,它一定会创建许多小文件,因为磁盘上没有大于 10GB 的文件,而且所有大于 1GB 的文件都比今天老得多。
如何找到正在占用磁盘空间的内容?
FWIW,只df
看到问题,没有看到du
。
例如,下面我展示了几张 60 秒的“快照du
” df
。分开。 (我在磁盘中腾出一些空间后执行了此操作。)请注意 的du
输出如何保持稳定(在495G
),但df
显示可用空间量稳步减少。 (我已遵循给出的建议这里。 IOW,/mnt/root
正在指向/
。)
# while true; do du -sh /mnt/root && df -h /mnt/root; sleep 60; done
495G /mnt/root
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 880G 824G 12G 99% /mnt/root
495G /mnt/root
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 880G 825G 11G 99% /mnt/root
495G /mnt/root
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 880G 827G 8.9G 99% /mnt/root
495G /mnt/root
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 880G 827G 8.1G 100% /mnt/root
495G /mnt/root
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 880G 828G 7.5G 100% /mnt/root
答案1
您正在处理已删除的文件,这就是为什么du
不注册已用空间,而是df
注册的原因。
删除的文件只有在所有者进程停止后才会消失;当这种情况没有发生时,它们仍然在使用。
因此,要找到罪魁祸首,我建议您这样做:
sudo lsof -nP | grep '(deleted)'
然后用于杀死进程。
sudo kill -9 $(lsof | grep deleted | cut -d " " -f4)
答案2
你可以使用iotop
查看哪些进程正在执行最多的磁盘写入操作。
例子:
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0]
8 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1]