如何检测哪个进程占用了磁盘空间

如何检测哪个进程占用了磁盘空间

周末期间,由于可用空间不足,我的基于 Debian 的代理崩溃了。重新启动后又好了,所以周一我去寻找周六挂起的日志和/或解释,但我找不到任何东西。

在 /var/log/* 中查找任何类型的内容,检查 crontab、邮件队列...我发现的唯一一件事是在 syslog 中监视系统回显,可用空间每分钟都变得至关重要(30 分钟内就填满了大约 80GB)。没有守护进程错误等。

我很容易了解实时发生的情况,但不知道过去如何进一步调试此类问题。有什么建议吗?

这是一年左右的时间里第一次发生这种情况。正常运行时间很短,接下来的几天问题没有再次出现。

谢谢

答案1

您可以使用atop调试这样的东西。 atop 可以实时运行,但对于您的情况更重要的是,它可以显示和分析日志中捕获的过去的快照。它记录了很多不同的指标,因此您可能不会在事后思考“该死,我希望我记录了它”。 :-)

在 Debian 上,您可以使用apt-get install atop.然后,您可以使用 init 管理器在启动时启动并启用它。例如,在 systemd 上,它将是systemctl enable atop && systemctl start atop.现在 atop 将开始记录 - 通常是到/var/log/atop/<date>.

您可以使用 查看历史日志atop -r <log file>,使用 向前查看t,使用 向后查看T。您可以通过按?键找到更多命令。

您应该寻找一个向磁盘写入大量数据的应用程序。您可以在 WRDISK 列中看到这一点。您还可以按磁盘使用情况排序D

显然,这不能回到 atop 开始记录之前,但您可以让它在后台运行并记录,以便下次您可以正确调查时。

答案2

还添加一些对磁盘使用情况的检查,特别是沿着lsof $partition_var_lives_on | grep deleted >> somefile. (还要看看日志是如何轮换的,如果是自定义的,很容易出现错误。)

相关内容