# iostat - 监视系统输入输出设备和CPU的使用情况

iostat命令 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

iostat指令用来显示cpu状态,系统IO设备的状态,以及相关磁盘和NFS使用状态。iostat命令通过观察设备相对于其平均传输速率的活动时间来监视系统输入/输出设备负载。iostat命令生成可用于更改系统配置的报告,以更好地平衡物理磁盘之间的输入/输出负载。

iostat命令生成的第一个报告提供了自系统启动以来的统计数据,除非在省略该第一个报告时使用-y选项。每一份后续报告都涵盖自上次报告以来的时间。每次运行iostat命令时都会报告所有统计信息。报告由CPU标题行和CPU统计数据行后面的一行组成。在多处理器系统中,CPU统计数据作为所有处理器之间的平均值计算在系统范围内.设备标题行后面显示配置的每个设备的一行统计信息。当使用选项-n时,会显示NFS标题行,并为每个已挂载的网络文件系统显示一行统计信息。

# 适用范围

RedHat
RHEL
Ubuntu
CentOS
Debian
Deepin
SUSE
openSUSE
Fedora
Linux Mint
Alpine Linux
Arch Linux

# 语法

iostat  [OPTION]

# 选项

-c   # 显示cpu情况
-d   # 显示设备利用率
-h   # 配合-n选项使用,让输出更加易读
-j   # 显示指定设备的名字、id、label
-k   # 以“kb/s”为单位显示,默认使用“块/s”为单位
-m   # 以Mb/s为单位
-N   # 显示注册设备的映射名字
-n   # 显示NFS状态
-p   # 显示块设备状态
-t   # 显示报告时间
-x   # 显示扩展信息
-V   # 显示版本信息,并且退出
-y   # 如果在给定间隔内显示多个记录,则自系统启动以来省略带有统计信息的第一次报告。
-z   # 告诉iostat,对于在示例期间没有活动的任何设备,都要省略输出。

# 报告

iostat命令生成三种类型的报告:CPU利用率报告、设备使用报告和网络文件系统报告。

1)CPU利用率报告

iostat命令生成的第一个报告是CPU利用率报告。对于多处理器系统,CPU值是所有处理器之间的全局平均值。报告的格式如下:

报告内容 说明
%user 显示在用户级别(应用程序)执行时CPU利用率的百分比。
%nice 以良好的优先级在用户级别执行时显示CPU利用率的百分比。
%system 显示在系统级(内核)执行时出现的CPU利用率百分比。
%iowait 显示CPU或CPU空闲的时间百分比,在此期间,系统有未执行的磁盘I/O请求。
%steal 显示虚拟机管理程序为另一个虚拟处理器服务时,虚拟CPU或CPU在非自愿等待中花费的时间百分比。
%idle 显示CPU或CPU空闲的时间百分比,并且系统没有未执行的磁盘I/O请求。

2)设备使用报告

iostat命令生成的第二个报告是设备使用报告。设备报告提供每个物理设备或分区的统计信息。可以在命令行上输入要显示统计信息的块设备。如果不使用-x选项,也可以在命令行中输入分区。如果没有输入设备或分区,则为系统使用的每个设备显示统计信息,并提供内核为其维护统计信息。如果在命令行上给出ALL关键字,则会显示系统定义的每个设备的统计信息,包括从未使用过的设备。报告可能会显示以下字段,这取决于所使用的标志

报告内容 说明
Device: 该列给出了nth设备的设备(或分区)名称,它以devm-n的形式显示,内核为2.4,其中m是设备的主要数字,n是一个独特的数字。对于较新的内核,将显示/dev目录中列出的设备名称。
tps 指示每秒发送给设备的传输次数。传输是对设备的I/O请求。多个逻辑请求可以组合成对设备的单个I/O请求。转移是不确定的大小。
Blk_read/s 指示从设备读取的数据量,以每秒多个块表示。块等效于内核2.4及更高版本的扇区,因此其大小为512字节。对于较老的核,块的大小是不确定的。
Blk_wrtn/s 指示写入设备的数据量,以每秒多个块表示。
Blk_read 读入的总块数
Blk_wrtn 写入的总块数
kB_read/s 指示从设备读取的数据量,以每秒千字节表示。
kB_wrtn/s 指示从设备写入的数据量,以每秒千字节表示。
kB_read 读取的总量,kb
kB_wrtn 写入的总量,kb
MB_read/s 指示写入设备的数据量,以每秒兆字节表示。
MB_wrtn/s 指示读取设备的数据量,以每秒兆字节表示。
MB_read 读取的总量,Mb
MB_wrtn 写入的总量,Mb
rrqm/s 每秒合并到设备的读取请求数。
wrqm/s 每秒合并到设备的写入请求数。
r/s 每秒向设备发出的读取请求数。
w/s 每秒向设备发出的写入请求数。
rsec/s 每秒从设备读取的扇区数。
wsec/s 每秒从设备写入的扇区数。
rkB/s 每秒从设备读取的千字节数。
wkB/s 每秒从设备写入的千字节数。
rMB/s 每秒从设备读取的兆字节数。
wMB/s 每秒从设备写入的兆节数。
avgrq-sz 向设备发出的请求的平均大小(按扇区)
avgqu-sz 向设备发出的请求的平均队列长度。
await 向要服务的设备发出I/O请求的平均时间(毫秒)。这包括请求在队列中花费的时间和服务它们的时间。
svctm 向设备发出的I/O请求的平均服务时间(毫秒)。警告!不要再相信这个领域了。此字段将在以后的sysstat版本中删除。
%util 向设备发出I/O请求的CPU时间百分比(设备的带宽利用率)。当此值接近100%时,设备饱和发生。

3)NFS报告

NetworkFilessystem(NFS)报告为每个挂载的网络文件系统提供统计信息。报告显示了以下领域:

报告内容 说明
Filesystem: 此列显示NFS服务器的主机名,后面是冒号,以及安装网络文件系统的目录名。
rBlk_nor/s 指示应用程序通过Read(2)系统调用接口读取的块数。块的大小为512字节。
wBlk_nor/s 指示应用程序通过写(2)系统调用接口编写的块数。块的大小为512字节。
rBlk_dir/s 指示从使用O_DIRECT标志打开的文件中读取的块数。
wBlk_dir/s 指示写入使用O_DIRECT标志打开的文件的块数。
rBlk_svr/s 指示NFS客户端通过NFS读取请求从服务器读取的块数。
wBlk_svr/s 指示NFS客户端通过NFS读取请求从服务器写入的块数。
rkB_nor/s 指示应用程序通过Read(2)系统调用接口读取的千字节数。
wkB_nor/s 指示应用程序通过write(2)系统调用接口编写的千字节数。
rkB_dir/s 指示从使用O_DIRECT标志打开的文件中读取的千字节数。
wkB_dir/s 指示写入到使用O_DIRECT标志打开的文件中的千字节数。
rkB_svr/s 指示NFS客户端通过NFS读取请求从服务器读取的千字节数。
wkB_svr/s 指示NFS客户端通过NFS读取请求从服务器写入的千字节数。
rMB_nor/s 指示应用程序通过Read(2)系统调用接口读取的兆字节数。
wMB_nor/s 指示应用程序通过write(2)系统调用接口编写的兆字节数。
rMB_dir/s 指示从使用O_DIRECT标志打开的文件中读取的兆字节数。
wMB_dir/s 指示写入到使用O_DIRECT标志打开的文件中的兆字节数。
rMB_svr/s 指示NFS客户端通过NFS读取请求从服务器读取的兆字节数。
wMB_svr/s 指示NFS客户端通过NFS读取请求从服务器写入的兆字节数。
ops/s 指示每秒向文件系统发出的操作数。
rops/s 指示每秒向文件系统发出的“读”操作数。
wops/s 指示每秒向文件系统发出的“写”操作数。

# 环境变量

iostat命令考虑了以下环境变量:

S_TIME_FORMAT,如果存在此变量,且其值为ISO,则在报表标题中打印日期时,将忽略当前区域设置。iostat命令将使用ISO 8601格式(YYYY-MM-DD)。选项-t显示的时间戳也将符合ISO 8601格式。

# 举例

iostat      # 为所有CPU和设备显示自启动报告以来的单个历史记录
iostat –d 2  # 以两秒钟间隔显示连续设备报告
iostat –d 2 6  # 对所有设备每隔两秒钟播放六次报告
iostat -x hda hdb 2 6  # 以两秒钟的间隔显示六份扩展统计报告,用于设备HDA和HDB。
iostat -p sda 2 6   # 为设备SDA及其所有分区(sda 1等)以两秒钟间隔显示六个报告。

显示cpu情况

[sogrey@bogon ~]$ iostat –c
Linux 3.10.0-862.14.1.0.h209.eulerosv2r7.x86_64 (bogon) 	2021年06月29日 _x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          51.41    0.04   15.55    0.50    0.00   32.50

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
[sogrey@bogon ~]$

显示nfs系统状态

[sogrey@bogon ~]$ iostat -n -h –t # 显示nfs状态,要求显示出时间
用法: iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]
选项:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ [ -T ] -g <用户组名> ] [ -p [ <设备> [,...] | ALL ] ]
[ <设备> [...] | ALL ]
[sogrey@bogon ~]$