如何列出 IO 消耗最高的文件?

如何列出 IO 消耗最高的文件?

我的文档管理软件正在执行大量 IO,我想知道它访问最多的是哪些文件。

是否有一个 Linux 工具可以每隔几秒给我一次 IO 消耗最高的文件列表,例如 iotop,但对于文件?

这可能看起来像:

$ thetool
THRPUT   R/W/SWP FILE
40MB/s   write   /usr/alfresco/repo/1283421/1324928.doc
12MB/s   read    /usr/alfresco/cache/3928dh29f8if
11MB/s   read    /tmp/239398hf2f024f472.tmp

iotop我查看了、的手册页lsofstrace他们似乎没有提供这样的功能。

答案1

我认为您的“字节数”指标是错误的。考虑两个访问。从一个文件中读取 10MB。另一个读取文件的每 512 个字节,获取前 10MB。与第二次访问相比,第一次访问的“字节数”将增加 512 倍。然而,它们都会给 I/O 子系统带来完全相同的负载。

如果您可以接受“操作数”(它与“字节数”一样好或一样坏),那么您就拥有了可以实际测量的东西。该inotifywatch程序执行此操作,并且它可能是您的发行版inotify-tools包的一部分。

它会立即告诉您哪些文件构成了大部分访问,并且可能会帮助您解决实际问题。

答案2

首先澄清一下:不存在这样的事情“IO消耗文件”。文件是被动对象。这是程式触发 IO(通常通过读/写文件)并且它们可以或多或少地访问文件。所以吞吐量你提到的关于文件实际上没有多大意义。有关文件的有用信息可能是访问和修改文件的频率。这可以使用notifywait -m /some/file/or/directory(来自inotify工具)或一些更复杂的系统,例如FAM或者加明

相关内容