![如何监视特定 Linux 目录或文件中的 I/O 流的读/写字节数?](https://linux22.com/image/28133/%E5%A6%82%E4%BD%95%E7%9B%91%E8%A7%86%E7%89%B9%E5%AE%9A%20Linux%20%E7%9B%AE%E5%BD%95%E6%88%96%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%20I%2FO%20%E6%B5%81%E7%9A%84%E8%AF%BB%2F%E5%86%99%E5%AD%97%E8%8A%82%E6%95%B0%EF%BC%9F.png)
我在监视特定目录中的 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
计算指向您的文件/目录的所有文件描述符的所有读/写调用的偏移量。
所有这些解决方案都不能精确到单个字节,但可以为您提供良好的估计。