确定哪个进程导致繁重的磁盘I / O?

我见过这个问题: 如何识别大量写入磁盘?

我之前使用过dstat和atop ,但是他们似乎并没有明确哪个进程正在导致磁盘I / O。 例如,从dstat:

dstat -ta --top-bio ----system---- ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- ----most-expensive---- time |usr sys idl wai hiq siq| read writ| recv send| in out | int csw | block i/o process 14-12 16:16:25| 22 3 49 26 0 0|2324k 0 | 17k 6144B| 0 0 |1324 0 | 14-12 16:16:26| 24 3 30 43 0 0|4960k 8192B|1498B 4322B| 0 0 |1494 0 |wget 0 4096B 14-12 16:16:27| 25 4 38 33 0 0|4612k 548k|5011B 27k| 0 0 |1582 0 |kjournald 0 24k 14-12 16:16:28| 23 3 42 32 0 0|5072k 0 | 24k 4368B| 0 0 |1495 0 | 

请注意,dsk / total有多高 – 介于2到5 MB /秒之间。 但是请看“最贵”的专栏 – 这里只有几个字节,有一些KB,有时甚至没有。 这与“顶”是一样的。 显示较高的整体磁盘使用率,但个别进程的使用率较低。 我正在运行CentOS 5,内核2.6.18-53。

我需要更新的内核版本吗? 也许一些系统configuration设置的地方? 'atop'主页build议安装一些内核补丁,但我宁愿不经过configuration和编译我自己的内核的麻烦。

iotop( 链接 )初学者;)我还没有看到你发布它的输出。

1:我经历了与日志文件系统和atime几乎相同的情况 – 但是有更多的写入。

尝试重新挂载noatime并closures文件系统日志logging(稍后仅用于testing),以便查看它是否基于文件系统,如上所述,iotop是否基于进程。

2:我猜这个分区不是正式重buildRAIDarrays的一部分,是吗?

3:如果你有很多非常小的文件(比实际块设备块大小和/或文件系统块大小小很多),并且你正在读这些小文件,那么你最终会从系统中读取整个块,而大多数的那些块将被读取为空。

4:如果上面没有任何帮助,你可以总是得到执行的文件列表

 echo 1 > /proc/sys/vm/block_dump 

请注意,它会大大降低系统性能。 说明可以在我以前的post里看到