如何监控特定目录中的磁盘 I/O?

如何监控特定目录中的磁盘 I/O?

我有一些已知名称的进程,它们都写入单个目录中的文件。我想记录的数量一段时间内磁盘块的读写次数不是只是文件访问)来测试参数更改是否会显着减少 I/O 量。我目前正在使用iostat -d -p,但这仅限于整个分区。

答案1

我意识到这听起来既简单又荒谬,但是如果您可以控制有问题的应用程序(也许在测试环境中),您可以仅在其自己的分区上安装该目录,然后iostat等等只会告诉您关于它,在那一点上没有其他任何事情。

如果涉及物理驱动器,您可以使用环回安装来伪造它

dd if=/dev/zero of=/bigdisk/LOOPFILE bs=1024m count=1024m # 1gb loopback file
mke2fs -j /bigdisk/LOOPFILE
mkdir /tmpcopy
mount -o loop /tmpcopy /bigdisk/LOOPFILE
cp -r -p $SPECIALDIR2MONITOR /tmpcopy
umount /tmpcopy
mount -o loop $SPECIALDIR2MONITOR  /bigdisk/LOOPFILE,

这不会完全删除所有竞争的磁盘 I/O,但我很确定 的iostat输出将更具体地满足您的需求。

答案2

您可以使用inotifywait -m DIRNAME来自inotify 工具

答案3

我认为没有直接的方法。获取所需数据的一种方法是通过虚拟文件系统记录访问。日志文件系统就是这样一个文件系统,尽管我不知道它是否可以显示您感兴趣的所有数据。(如果不能,则可能只是对该​​数据进行适度的编码工作。)

mkdir /tmp/replica
loggedfs /path/to/directory /tmp/replica
mycommand --root=/tmp/replica
fusermount -u /tmp/replica

相关内容