Unix命令 iostat

Unix iostat 命令可以用于展示内存的使用情况

汇报IO相关统计信息

摘要

iostat [ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ] [ -j { ID | LABEL | PATH | UUID | ... } [ device [...] | ALL ] ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [interval [ count ] ]

默认情况下iostat会打印cpu信息和磁盘io信息,使用-d参数只显示IO部分,使用-x打印更多信息。

样例输出:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.77    0.00    1.31    0.07    0.00   92.85

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               0.00         0.00         0.00          0          0
sda               0.00         0.00         0.00          0          0
dfa            5020.00     15856.00     35632.00      15856      35632
dm-0              0.00         0.00         0.00          0          0

常用选项

  • 使用-d参数只显示IO部分的信息,而-c参数则只显示CPU部分的信息。

  • 使用-x会打印更详细的扩展信息

  • 使用-k会使用KB替代块数目作为部分数值的单位,-m则使用MB。

输出说明

不带-x选项默认会为每个设备打印5列:

  • tps:该设备每秒的传输次数。(多个逻辑请求可能会合并为一个IO请求,传输量未知)
  • kB_read/s:每秒从设备读取的数据量;kB_wrtn/s:每秒向设备写入的数据量;kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes,这是使用-k参数的情况。默认则以块数为单位。

带有-x选项后,会打印更多信息:

  • rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
  • wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
  • r/s 与 w/s:(合并后)每秒读取/写入请求次数
  • rsec/s 与 wsec/s:每秒读取/写入扇区的数目
  • avgrq-sz:请求的平均大小(以扇区计)
  • avgqu-sz:平均请求队列长度
  • await:每一个IO请求的处理的平均时间(单位是毫秒)
  • r_await/w_await:读/写的平均响应时间。
  • %util:设备的带宽利用率,IO时间占比。在统计时间内所有处理IO时间。一般该参数是100%表示设备已经接近满负荷运行了。

常用方法

收集/dev/dfa的IO信息,按kB计算,每秒一次连续10次。

iostat -dxk /dev/dfa 1 10

数据来源

其实是从下面几个文件中提取信息的:

/proc/stat contains system statistics.

/proc/uptime contains system uptime.

/proc/partitions contains disk statistics (for pre 2.5 kernels that have been patched).

/proc/diskstats contains disks statistics (for post 2.5 kernels).

/sys contains statistics for block devices (post 2.5 kernels).

/proc/self/mountstats contains statistics for network filesystems.

/dev/disk contains persistent device names.