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


11

我的文档管理软件正在处理大量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

我看着的手册页iotoplsofstrace他们似乎并没有提供这样的功能。


您可以编写一个后处理器以从“ strace”获取此信息,但据我所知,尚不存在这样的工具。(这种工具会错过通过'mmap'进行的操作。)
David Schwartz,

Answers:


2

我认为您的“字节数”度量标准是错误的。考虑两次访问。一个从文件中读取10MB。另一个在前10MB中读取文件的第512个字节。第一次访问的“字节数”将比第二次访问高512倍。但是,它们都会对I / O子系统施加完全相同的负载。

如果您可以接受与“字节数”差不多的“操作数”,那么您实际上可以测量。该inotifywatch程序会执行此操作,它很可能是您的发行版inotify-tools软件包的一部分。

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


iotop使用MB / s作为指标,iotop错误吗?+1为您的inotifywatch建议,手册页中的示例正是我所需要的,以及我在问题中描述的内容。非常感谢!
Nicolas Raoul

是的,但是“ iotop”无法识别文件,只能阻止设备。因此,它可以帮助您确定问题的过程和/或问题的文件系统/设备,而不是它正在访问的文件。您可能需要使用不同的工具将各个部分放在一起。
大卫·史瓦兹

哼,有趣,谢谢!我正在玩inotifywatch,我将检查我能做什么。
Nicolas Raoul

0

首先,要澄清一下:没有“ IO消耗文件”之类的东西。文件是被动对象。这是计划是触发IO(通常是通过读/写文件),他们可以或多或少经常访问文件。因此,您提到的文件吞吐量实际上没有多大意义。有关文件的有用信息可能是文件的访问和修改频率。可以使用notifywait -m /some/file/or/directory(通过inotify工具)或一些更复杂的系统(例如FAMGamin)进行监视。


我将这种“吞吐量”(另一个词可能更合适,对不起我的英语)描述为在一秒钟内从特定文件读取/写入特定文件的字节数(在此期间访问该文件的每个进程的总和)第二)。我希望这更有意义。不幸的是,inotifywait,fam,gamin只告诉我“文件X已被修改/读取”,这很有趣,但不是我想要的。
Nicolas Raoul
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.