本文汇总了网上一些linux系统下获取I/O信息的方法
1,iostat命令,这个命令可以在2.6.X中安装使用(C语言实现的),但是不好的地方时它并没有提供每个进程的I/O信息,而是按设备块来统计的I/O。
root@localhost:/root> iostat -dk
Linux 2.6.34.8-WR4.1.0.0_standard (localhost) 05/06/11
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.02 0.02 0.14 29552 185344
sda1 0.00 0.00 0.00 171 0
sda2 0.00 0.00 0.00 164 0
sda3 0.00 0.00 0.00 164 0
sda4 0.00 0.00 0.00 129 0
sda5 0.00 0.00 0.00 100 0
sda6 0.02 0.02 0.14 28241 185132
sda7 0.00 0.00 0.00 370 212
2,iotop命令,这个命令可以提供每个进程的I/O信息,但是不好的地方是它使用 Python 语言编写而成,要求 Python 2.5(及以上版本)和 Linux kernel 2.6.20(及以上版本)。
3,对于2.6.20以下内核版本中可以获取单个进程的I/O信息,可以使用如下方法
监控一个进程的I/O信息的原理如下:In Linux 2.6.1, a widely unknown and poorly implemented feature was added that allows you to monitor filesystem activity on a global scale: /proc/sys/vm/block_dump在这个文件中设置为1echo 1 > /proc/sys/vm/block_dump现在就会dump活动信息到syslog中,然后使用dmesg将日志输出到临时文件。dmesg -c > /tmp/diskio.log文件中会有如下类似信息kjournald(902): WRITE block 74620912 on sda4kjournald(902): WRITE block 133320 on sda4kjournald(902): WRITE block 133328 on sda4kjournald(902): WRITE block 133336 on sda4pdflush(30503): WRITE block 79167488 on sda4pdflush(30503): WRITE block 79167496 on sda4pdflush(30503): WRITE block 79167504 on sda4到这里大家就应该清楚是怎么得到I/O信息了现在只要过滤WRITE和READ的行,并记录下进程名和进程id就可以了