iostat指令可以给我们提供丰富的IO状态数据
1. 基本用法
-laptop:~$ iostat -d -k 2 5 Linux 2.6.32-21-generic (vigar-laptop) 2012年11月19日 _i686_ (4 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 29.01 579.76 152.34 988019 259608 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.00 0.00 0.00 0 0 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 4.00 0.00 550.00 0 1100 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 19.00 0.00 908.00 0 1816 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 3.00 0.00 392.00 0 784
参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;2 每隔1秒刷新一次,5 共显示5次
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是39.29,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)
2. -c 用于取cpu状态
laptop:~$ iostat -c 2 5 Linux 2.6.32-21-generic (vigar-laptop) 2012年11月19日 _i686_ (4CPU) avg-cpu: %user %nice %system %iowait %steal %idle 24.49 0.58 4.77 3.60 0.00 66.57 avg-cpu: %user %nice %system %iowait %steal %idle 49.00 0.00 10.45 0.25 0.00 40.30 avg-cpu: %user %nice %system %iowait %steal %idle 31.22 0.24 7.07 1.46 0.00 60.00 avg-cpu: %user %nice %system %iowait %steal %idle 33.33 0.00 6.81 0.00 0.00 59.85 avg-cpu: %user %nice %system %iowait %steal %idle 29.48 0.00 7.37 0.00 0.00 63.14
%user:用户进程时间占用量
%nice: nice进程时间占用量。不贪婪使用cpu的进程称为nice的^^
%system:系统时间占用量
%iowait:等待io动作的时间占用量
%steal:用于进程切换的时间占用量
%idle: cpu空闲比例,最真观看出cpu负载
3. 常用指令:
$iostat -d -k 1 10 #查看TPS和吞吐量信息 iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await) iostat -c 1 10 #查看cpu状态
4. -x参数获取详细信息
vigar@vigar-laptop:~$ iostat -d -k -x 2 5 Linux 2.6.32-21-generic (vigar-laptop) 2012年11月19日 _i686_ (4 CPU) Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 9.70 58.96 17.32 5.53 475.59 257.90 64.21 0.94 41.17 3.91 8.94 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 5.50 194.00 5.50 23.00 230.00 884.00 78.18 0.37 13.12 3.51 10.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 0.00 3.00 0.00 306.00 0.00 204.00 0.05 18.00 9.33 2.80 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 5.00 114.00 8.00 4.00 782.00 472.00 209.00 0.13 11.17 10.17 12.20 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 5.00 0.00 3.00 0.00 160.00 0.00 106.67 0.01 2.00 1.33 0.40
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。r/s:The number of read requests that were issued to the device per second;w/s:The number of write requests that were issued to the device per second;
await:每一个IO请求的处理的平均时间(单位是毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
%util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
参考文章:http://www.orczhou.com/index.php/2010/03/iostat-detail/