如何监视特定 Linux 目录或文件中的 I/O 流的读/写字节数?

如何监视特定 Linux 目录或文件中的 I/O 流的读/写字节数?

我在监视特定目录中的 I/O 流时遇到问题:指定时间段内读取和写入的字节数。

我一直在尝试使用iostatinotifywaitinotifywatch,但不幸的是它们仅测量目录上的活动(打开、关闭、修改等),它们不提供有关读取和写入的字节的信息。

答案1

一个选择是使用该audit系统。就像是:

sudo auditctl -a exit,always -F dir=/the/directory -p rw

然后分析audit.logI/O系统调用。

答案2

据我所知,没有标准工具能够做到这一点。然而我可以想到几种实现这一目标的方法,每种方法都有其缺点。

如果您知道哪个进程将访问文件/目录,并且确定该进程只执行很少或不执行其他 I/O,您可以通过查看/ (任何 I/O)或/来解析/proc/PID/io并确定读/写字节数(磁盘 I/O)或什至/ (类似 read()/write() 的系统调用的数量)。rcharwcharread_byteswrite_bytessyscrsyscw

如果您不知道哪个进程将访问文件/目录(但您确定这些进程只执行很少或不执行其他 I/O),则必须使用该inotify功能监视位置,确定 PID,然后执行所描述的机制在上一段中。

如果过程确定其他 I/O 会变得稍微复杂一些。您必须strace计算指向您的文件/目录的所有文件描述符的所有读/写调用的偏移量。

所有这些解决方案都不能精确到单个字节,但可以为您提供良好的估计。

相关内容