代码改变世界

Linux Tools 之 iostat 工具总结

2019-07-31 13:19  H_Johnny  阅读(411)  评论(0编辑  收藏

iostat是Linux中被用来监控系统的I/O设备活动情况的工具,是input/output statistics的缩写。它可以生成三种类型的报告:

  1. CPU利用率报告
  2. 设备利用率报告
  3. 网络文件系统报告

iostat通过生成的报告来帮助管理员更好的调整系统设置来平衡各个物理磁盘之间的I/O负载。

Linux里iostat命令是在包含在系统包sysstat当中的,如果没有iostat命令则需事先安装sysstat系统包,可用yum命令来进行安装:

# yum install sysstat -y

主要说明

iostat [OPTION] [DEVICE] [INTERVAL [count]]

详细参数说明可以参考:http://man7.org/linux/man-pages/man1/iostat.1.html

报告说明

这里主要以经常用到的CPU磁盘I/O分析需要用到的报告为主。

CPU利用率报告(CPU Utilization Report)

如果服务器是多核CPU,则数值为所有核心数值的平均值。

%user: CPU处在用户(应用)级别的利用率百分比。
%nice:CPU处在用户级别且有`NICE`值的利用率百分比。
%system:CPU处在系统(内核)级别的利用率百分比。
%iowait:CPU等待系统I/O请求的时间百分比。
%steal:虚拟CPU无意识等待系统程序处理另外的虚拟处理器所花费时间的百分比。
%idle:CPU空闲的时间百分比。

设备利用率报告(Device Utilization Report)

Device:显示的是设备名或者是分区名。不同的内核版本有不同的显示方式。
tps:设备每秒的传输次数。一次传输就是对设备一次的`I/O`请求,多次的逻辑请求可以合并成单个`I/O`请求。
Blk_read/s:每秒从设备读取的数据量,以`BLOCK`方式计算,在内核`2.4`及之后版本中,每个`BLOCK`的大小为512字节。
Blk_wrtn/s:每秒写入设备的数据量。
Blk_read:总共读取的`BLOCK`数量。
Blk_wrtn:总共写入的`BLOCK`数量。
kB_read/s:每秒从设备读取的数据量,单位`KB`。
kB_wrtn/s:每秒写入设备的数据量,单位`KB`。
kB_read:总共从设备读取的数据量,单位`KB`。
kB_wrtn:总共写入设备的数据量,单位`KB`。
MB_read/s、MB_wrtn/s、MB_read、MB_wrtn:参考上述的信息描述,单位为`MB`。
rrqm/s:每秒合并的读请求数,当请求排队到设备时。
wrqm/s:每秒合并的写请求数,当请求排队到设备时。
r/s:每秒发送给设备的读请求数。
w/s:每秒发送给设备的写请求数。
rsec/s:每秒从设备读取的扇区数量。
wsec/s:每秒写入设备的扇区数量。
rkB/s:每秒从设备读取的`KB`数。
wkB/s:每秒写入设备的`KB`数。
rMB/s、wMB/s:参考上述的信息描述,单位为`MB`。
avgrq-sz:发送给设备请求的平均大小(以扇区为单位)。
avgqu-sz:发送给设备请求队列的平均长度。
await:发送给设备`I/O`请求的平均响应时间,单位是毫秒。包含请求于队列中的时间和服务于队列中的时间。
svctm:发送给设备`I/O`请求的平均服务时间。将在之后版本的`iostat`移除这个指标。
%util:发送给设备`I/O`请求消耗的时间的百分比。

主要选项

-c:显示CPU利用率报告。
-d:显示设备利用率报告。
-k:输出统计信息以`KB/S`显示。
-m:输出统计信息以`MB/S`显示。
-N:显示逻辑卷(LVM)的信息。
-n:显示NFS的信息。
-p [ { device [,...] | ALL } ]:显示指定的磁盘设备或者分区信息。
-t:显示报告的时间。timestamp格式由环境变量`S_TIME_FORMAT`决定。
-x:显示扩展的统计信息。
-y:忽略从系统启动到当前时间第一份报告。
-z:忽略显示不活动设备的信息。

主要用法

1、所有设备的负载情况

# iostat

Linux 2.6.32-358.el6.x86_64 (db)        10/25/2018      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.60    0.00    0.39    0.42    0.00   98.60

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               1.83         0.84        26.61    1437902   45525316

OR

# iostat -x

Linux 2.6.32-358.el6.x86_64 (db)        10/25/2018      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.60    0.00    0.39    0.42    0.00   98.60

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.01     1.38    0.03    1.81     0.84    26.61    14.97     0.01    3.23    4.01    3.21   2.89   0.53

2、显示CPU信息

# iostat -c 1 5
Linux 2.6.32-358.el6.x86_64 (db)        10/25/2018      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.60    0.00    0.39    0.42    0.00   98.60

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00   10.00    0.00   90.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

3、显示TPS

# iostat -d -k 1 3
Linux 2.6.32-358.el6.x86_64 (db)        10/25/2018      _x86_64_        (1 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.83         0.42        13.30     718951   22763214

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               0.00         0.00         0.00          0          0

4、显示设备使用率(%util)和响应时间(await)

# iostat -d -k -x 1 3
Linux 2.6.32-754.2.1.el6.x86_64 (db)  10/25/2018      _x86_64_        (24 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.01    61.87    0.13   62.10    11.18   479.23    15.76     0.01    0.13   0.05   0.31

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     4.00    1.00   16.00     8.00    80.00    10.35     0.01    0.71   0.71   1.20

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     1.00    0.00   12.00     0.00    52.00     8.67     0.00    0.17   0.17   0.20

注意:

以上主要用法都是所有设备的信息,如果需要指定某个设备,则可以加设备名进行单独显示;
如果不包含服务器开机至今第一次统计信息的展示,则需要加上选项-y去除。

总结

  • %util如果接近于100%,则表明磁盘一直在处理I/O请求,系统I/O是满负载状态,磁盘可能会存在I/O瓶颈,因为如有多个磁盘并发,并不一定说明磁盘有瓶颈;
  • 响应时间await时间一般要低于5ms(<5ms),如果超过10ms(>10ms)就比较大了;
  • %idle如果少于30%,则I/O压力就比较大。

参考

☆〖本人水平有限,文中如有错误还请留言批评指正!〗☆