%20%E4%B8%8A%20-%20%E6%9C%89%E4%BB%80%E4%B9%88%E6%9C%80%E5%BF%AB%E7%9A%84%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E6%89%BE%E5%88%B0%E5%AF%BC%E8%87%B4%E7%A9%BA%E9%97%B4%E4%B8%8D%E8%B6%B3%E7%9A%84%E8%BF%9B%E7%A8%8B%E5%92%8C%20FS%20%E8%B7%AF%E5%BE%84%EF%BC%9F.png)
这是我在 MacOS 和 GNU/Linux 上都经历过的场景 - 一个恶意进程开始占用磁盘空间。速度非常快。您可以看到,随着iostat
大量写入,可用df -h
空间的百分比越来越低,几分钟内磁盘就会 100% 满。
有什么最快的方法可以找出哪个进程正在执行此操作以及磁盘上哪个位置的已用磁盘空间正在不断增长?
在 GNU/Linux 上我可能会选择,lsof
但这通常需要花费大量时间来处理,也许遍历 /proc 并查找fd
每个进程的文件夹并检查哪个文件夹增长最快会更快?有没有好的用户空间工具可以做到这一点?
那么 MacOS 有什么可以做的吗?
答案1
在单独的空间中保持活动监视器打开,这样如果出现问题,您可以快速切换到它。
使用“磁盘”选项卡设置为按“写入的字节数”排序。在“查看”菜单中设置为“所有进程”。
如果出现失控情况,您会很快看到它上升到该页面的顶部。由于监控已在运行,因此无需等待处理完成即可启动。
这不会告诉您在哪里,但它应该告诉您什么,如果需要,您可以直接从该页面将其杀死。
答案2
如果du
没有看到这个已用空间,但df
确实看到了,则说明您正在处理已删除的文件。已删除的文件仅在所有者进程停止后才会消失,但在此之前仍处于使用状态。
lsof
是查找罪魁祸首进程的最佳工具,使用以下命令:
sudo lsof -nP | grep '(deleted)'
您可以嵌入此命令来终止该进程:
sudo kill -9 $(lsof | grep deleted | cut -d " " -f4)