如何检查应用程序写入了哪些文件?

und*_*ine 3 linux io files

在我的系统上,sar报告对磁盘的平均写入速度约为 5MB/s。使用dstat我发现它不是那么永久,但是有 30-50MB/s 的峰值,然后是睡眠。

使用iotop我发现大部分写作都是由一个应用程序完成的(但我不知道它有多确定)。

使用strace并且fatrace我看到该应用程序打开,在不同目录中创建文件,然后关闭/删除它们。有很多文件,但我没有看到strace太多的文字。我试图找出更多使用/proc/pid/fd来查看是否有任何文件不断增加(日志等),但我找不到任何文件。所以我的结论是,所有的写入都是通过应用程序创建的小临时文件完成的。

如何检查每个文件写入了多少?我想要一份报告,其中包含写入每个文件的字节数。

有什么办法吗?我考虑过重写系统调用openwrite监视对每个文件的更改,或者使用systemtap但我希望有更简单的方法。

Ste*_*itt 6

Brendan Gregg 的iosnoop(他的一部分perf-tools)将为您提供有关应用程序 I/O 的详细信息;例如:

# ./iosnoop
Tracing block I/O... Ctrl-C to end.
COMM             PID    TYPE DEV      BLOCK        BYTES     LATms
supervise        1809   W    202,1    17039968     4096       1.32
supervise        1809   W    202,1    17039976     4096       1.30
tar              14794  RM   202,1    8457608      4096       7.53
tar              14794  RM   202,1    8470336      4096      14.90
tar              14794  RM   202,1    8470368      4096       0.27
tar              14794  RM   202,1    8470784      4096       7.74
tar              14794  RM   202,1    8470360      4096       0.25
tar              14794  RM   202,1    8469968      4096       0.24
tar              14794  RM   202,1    8470240      4096       0.24
[...]
Run Code Online (Sandbox Code Playgroud)

(示例取自他的博客文章)。

您可以使用它来跟踪所有系统的 I/O 如上所述,或将其限制为单个进程、设备...