报告设备和分区的CPU统计信息和输入/输出统计信息
命令语法格式
iostat [ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ] [ -j { ID | LABEL | PATH | UUID | … } ] [ [ -H ] -g group_name ] [ -p [ device [,…] | ALL ] ] [ device […] | ALL ] [ interval [ count ] ]
命令描述
命令iostat用于通过观察设备相对于其平均传输速率的活动时间来监视系统输入/输出设备负载。命令iostat生成可用于更改系统配置的报告,以更好地平衡物理磁盘之间的输入/输出负载。
命令iostat生成的第一个报告提供了有关自系统引导以来的时间的统计信息,除非使用了-y选项(在这种情况下,省略了第一个报告)。每个后续报告都涵盖自上次报告以来的时间。每次运行iostat命令时都会报告所有统计信息。该报告由一个CPU标题行和一行CPU统计信息组成。在多处理器系统上,CPU统计信息在系统范围内计算为所有处理器之间的平均值。将显示设备标题行,然后显示已配置的每个设备的统计信息行。
参数interval指定每个报告之间的时间量(以秒为单位)。参数count可以与interval参数一起指定。如果指定了count参数,则count的值确定以间隔秒间隔生成的报告数。如果指定了interval参数而没有count参数,则iostat命令会连续生成报告。
命令支持的选项及含义
-c
仅显示CPU的使用率报告。
-d
仅显示存储设备的使用率报告。
-g group_name { device […] | ALL }
显示一组设备的统计信息。命令iostat报告列表中每个单独设备的统计信息,然后显示以group_name为名的全局统计信息,并由列表中的所有设备组成。关键词ALL意味着系统定义的所有块设备都应包含在组中。
-H
此选项必须与选项-g一起使用,并指示仅显示组的全局统计信息,而不显示组中各个设备的统计信息。使用选项-h隐式启用此选项。
-h
已更加易读的方式显示设备使用率。
-j { ID | LABEL | PATH | UUID | … } [ device […] | ALL ]
显示持久的设备名称。选项(ID,LABEL等)指定持久名称的类型。这些选项不受限制,唯一的条件是具有所需持久性名的目录存在于/dev/disk中。可以在所选择的持久名称类型中指定多个设备。因为持久的设备名称通常很长的选项。
-k
以kb为单位显示统计数据。
-m
以mb为单位显示统计数据。
-N
为任何“设备映射”设备显示注册设备映射名。查看LVM2统计信息时有用。
-p [ { device [,…] | ALL } ]
选项显示块设备及系统使用的所有分区的统计信息。如果在命令行中输入了设备名称,则会显示它及其所有分区的统计信息。最后,关键字ALL表示必须为系统定义的所有块设备和分区显示统计信息,包括从未使用的块设备和分区。如果在此选项之前使用了-j,则可以在命令行中使用所选的持久名称类型来指定的设备。
-t
打印显示的每个报告的时间。时间戳格式可能取决于S_TIME_FORMAT环境变量的值(见下文)。
-x
显示扩展的统计数据。
-y
在指定了interval来显示多次统计数据的情况下,如果指定了该选项,则省略第一次输出的总计统计信息。
-z
在数据采样期间,任何没有活动的设备都省略输出。
其他选项
-V
打印版本
输出字段含义
命令iostat生成两种类型的报告:CPU利用率报告;设备利用率报告。
CPU利用率报告
最先报告的是CPU的使用情况。在多处理器的情况下,报告的数据是一个平均值。下面是字段的含义:
%user,显示在用户级的应用程序执行时使用的CPU利用率的百分比。
%nice,显示有优先级的用户级别执行时CPU利用率的百分比。
%system,显示在内核执行时使用的CPU利用率的百分比。
%iowait,在系统有一个未完成的磁盘I/O请求期间,CPU空闲时间的百分比。
%steal,显示hypervisor正在维护另一个虚拟处理器时虚拟CPU在非自愿等待中花费的时间百分比。
%idle,系统没有未完成的磁盘I/O请求,CPU空闲时间的百分比。
存储设备利用率报告
命令iostat输出的第二部分是设备利用率报告。报告提供每个物理设备或分区的统计信息。可以在命令行中输入指定的块设备和分区的统计数据。如果没有输入设备或分区,则会显示系统使用的每个设备的统计信息,并提供内核维护统计信息。如果在命令行中给出了ALL关键字,则会对系统定义的每个设备(包括从未使用的设备)显示统计信息。默认情况下,传输速率显示为1K块,除非设置了POSIXLY_CORRECT环境变量,在这种情况下使用512字节块。
输出中的字段含义如下:
tps,发送到设备的每秒传输次数。传输是对设备的I/O请求。多个逻辑请求可以合并成到设备的单个I/O请求。传输是不确定的大小。
Blk_read/s (kB_read/s, MB_read/s),每秒从设备中读取的数据量。Block等同于Sector,因此大小为512 Byte。
Blk_wrtn/s (kB_wrtn/s, MB_wrtn/s),表示写入设备的数据量,以每秒的块数(千字节,兆字节)表示。
Blk_read (kB_read, MB_read),读取的总块数(千字节,兆字节)。
Blk_wrtn (kB_wrtn, MB_wrtn),写入的总块数(千字节,兆字节)。
rrqm/s,每秒合并并队列到设备的读取请求数。
wrqm/s,每秒合并并队列到设备的写入请求数。
r/s,设备每秒完成的读取请求数(合并后)。
w/s,设备每秒完成的写入请求数(合并后)。
rsec/s (rkB/s, rMB/s),从设备每秒读取的扇区数(千字节,兆字节)。
wsec/s (wkB/s, wMB/s),从设备每秒写入的扇区数(千字节,兆字节)。
avgrq-sz,发给设备的请求的平均大小(以扇区为单位)。
avgqu-sz,发送到设备的请求的平均队列长度。
await,发给设备的要维护的I/O请求的平均时间(以毫秒为单位)。这包括请求在队列中花费的时间以及为维护请求所花费的时间。
r_await,发给设备的要维护的读取请求的平均时间(以毫秒为单位)。这包括请求在队列中花费的时间以及为维护请求所花费的时间。
w_await,发送到要维护的设备的写请求的平均时间(以毫秒为单位)。这包括请求在队列中花费的时间以及为维护请求所花费的时间。
svctm,发送到设备的I/O请求的平均维护时间(以毫秒为单位)。警告!不要再相信这个字段了。此字段将在未来的sysstat版本中被删除。
%util,向设备发出I/O请求所耗费的时间百分比(设备的带宽利用率)。对于连续请求服务的设备,当该值接近100%时,发生设备饱和。但是对于并行处理请求的设备(如RAID阵列和现代SSD),这个数字并不反映其性能限制。
注意事项
文件系统/proc必须被挂载。
在2.6.x之前的内核不再支持。
因为I/O统计信息现在以块级别计算,所以平均服务时间(svctm字段)的值是无意义的,并且我们不知道磁盘驱动程序何时开始处理请求。因此,此字段将在未来的sysstat版本中被删除。
相关文件
/proc/stat
包含系统的统计数据。
/proc/uptime
包含了系统启动时间。
/proc/diskstats
包含硬盘统计信息。
/sys
包含了块设别的统计信息。
/proc/self/mountstats
包含了网络文件系统的统计信息。
/dev/disk
包含持久的设备名称。
相关环境变量
命令iostat会处理以下环境变量:
POSIXLY_CORRECT
当设置此变量时,传输速率显示为512字节块,而不是默认的1K块。
S_COLORS
设置此变量时,在终端上显示带颜色的统计信息。此变量的取值:never,always,auto。
注意,用于显示值的颜色(为红色,黄色或其他颜色)并不表示任何类型的问题,仅仅是有颜色。它只表示不同的值范围。
S_COLORS_SGR
指定用于显示终端统计信息的颜色和其他属性。其值是冒号分隔的功能列表,默认为:H=31;1:I=32;22:M=34;1:N=33;1:Z=33;22。支持如下功能:
I=SGR 设备名的子字符串。
M=SGR 百分比值范围在50%到75%之间的子字符串。
N=SGR 非零值统计数据的子字符串。
Z=SGR 零值的子字符串。
S_TIME_FORMAT
如果此变量存在,且其值为ISO,那么当输出的头部中打印日期时,当前区域设置将被忽略。iostat命令将使用ISO 8601格式(YYYY-MM-DD)。与-t一起显示的时间戳也将使用ISO 8601格式。
使用示例
为所有CPU和设备显示自引导以来的单个历史记录。
每隔两秒报告一次。
每2秒报告一次,持续6次。
显示sda与sdb的统计数据,每2秒报告一次,持续6次。
显示sda及其分区的统计数据,每2秒报告一次,持续6次。
以上示例
相关手册
sar(1), pidstat(1), mpstat(1), vmstat(8), tapestat(1), nfsiostat(1), cifsiostat(1)
http://pagesperso-orange.fr/sebastien.godard
参考文献
- man 1 iostat, Version 11.4.1-1
更新日志
- 07/16/2017 创建文章
- 10/20/2018 调整文章内容