我想监视正在运行的进程的磁盘空间需求。理想情况下,我希望能够指向一个进程并找出归因于它的已用磁盘空间的净变化。在 Linux 中是否有一种简单的方法可以做到这一点?(我很确定在 Solaris 中使用 DTrace 执行此操作是可行的,尽管可能不是很容易)
问问题
389 次
3 回答
2
可能你必须 ptrace 它(或让 strace 为你做它并解析输出),然后尝试找出正在使用的磁盘。
这很重要,因为您的跟踪过程需要了解哪些文件操作使用磁盘空间 - 并且没有竞争条件。但是,您也许可以做一个近似值。
很多东西都会占用磁盘空间,因为大多数 Linux 文件系统都支持“漏洞”。我想您也可以出于会计目的计算漏洞。
另一个问题是知道哪些文件系统操作释放了磁盘空间——例如,打开一个文件进行写入可能在某些情况下截断它。这显然释放了空间。同样,如果在现有文件上重命名文件,则重命名文件可以释放空间。
另一个问题是调用辅助进程来做事的进程——例如,如果 myprog 执行系统(“rm -rf somedir”)。
此外,很难知道文件何时被完全删除,因为它可能已从文件系统中删除,但仍被另一个进程打开。
快乐的黑客:)
于 2011-02-06T16:28:03.557 回答
0
如果您知道要监视的进程的 PID,您会在/proc/<PID>
.
该文件/proc/<PID>/io
包含有关进程读取和写入的字节数的统计信息,它应该是您正在寻找的。
此外,/proc/<PID>/fd/
您会发现您的进程打开的所有文件的链接,因此您可以监控它们。
于 2011-02-04T17:14:59.353 回答
0
于 2011-02-06T14:37:40.667 回答