我在监视特定目录中的 I/O 流时遇到问题:指定时间段内读取和写入的字节数。
我一直在尝试使用iostat
、inotifywait
和inotifywatch
,但不幸的是它们仅测量目录上的活动(打开、关闭、修改等),它们不提供有关读取和写入的字节的信息。
答案1
一个选择是使用该audit
系统。就像是:
sudo auditctl -a exit,always -F dir=/the/directory -p rw
然后分析audit.log
I/O系统调用。
答案2
据我所知,没有标准工具能够做到这一点。然而我可以想到几种实现这一目标的方法,每种方法都有其缺点。
如果您知道哪个进程将访问文件/目录,并且确定该进程只执行很少或不执行其他 I/O,您可以通过查看/ (任何 I/O)或/来解析/proc/PID/io
并确定读/写字节数(磁盘 I/O)或什至/ (类似 read()/write() 的系统调用的数量)。rchar
wchar
read_bytes
write_bytes
syscr
syscw
如果您不知道哪个进程将访问文件/目录(但您确定这些进程只执行很少或不执行其他 I/O),则必须使用该inotify
功能监视位置,确定 PID,然后执行所描述的机制在上一段中。
如果过程确定做其他 I/O 会变得稍微复杂一些。您必须strace
计算指向您的文件/目录的所有文件描述符的所有读/写调用的偏移量。
所有这些解决方案都不能精确到单个字节,但可以为您提供良好的估计。