- iostat
- 性能评估的一个主要部分就是磁盘性能。iostat 命令提供了存储接口的性能指标。
- # iostat
- Linux 2.6.9-55.0.9.ELlargesmp (prolin3) 12/27/2008
- avg-cpu: %user %nice %sys %iowait %idle
- 15.71 0.00 1.07 3.30 79.91
- Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
- cciss/c0d0 4.85 34.82 130.69 307949274 1155708619
- cciss/c0d0p1 0.08 0.21 0.00 1897036 3659
- cciss/c0d0p2 18.11 34.61 130.69 306051650 1155700792
- cciss/c0d1 0.96 13.32 19.75 117780303 174676304
- cciss/c0d1p1 2.67 13.32 19.75 117780007 174676288
- sda 0.00 0.00 0.00 184 0
- sdb 1.03 5.94 18.84 52490104 166623534
- sdc 0.00 0.00 0.00 184 0
- sdd 1.74 38.19 11.49 337697496 101649200
- sde 0.00 0.00 0.00 184 0
- sdf 1.51 34.90 6.80 308638992 60159368
- sdg 0.00 0.00 0.00 184 0
- ... and so on ...
- 输出的开始部分显示了可用 CPU 和 I/O 等待时间等指标,与您在 mpstat 命令中看到的相同。
- 输出的下一部分显示对系统上每个磁盘设备非常重要的指标。让我们看一看这些列的含义:
- tps 每秒的传输数量,例如,每秒的 I/O 操作数。注:这只是 I/O 操作的数量;每个操作可能非常大,也可能非常小。
- Blk_read/s 每秒从该设备读取的块数。通常,块的大小为 512 字节。这是一个磁盘利用率较好的值。
- Blk_wrtn/s 每秒写入该设备的块数
- Blk_read 到目前为止从该设备读取的块数。注意,这并不是正在发生的情况。很多块已经从该设备读取。
- 可能现在什么也没有读取。观察一段时间,看是否有变化。
- Blk_wrtn 写入该设备的块数。
- 在一个拥有很多设备的系统中,输出可能需要通过屏幕多次滚动 — 这使得某些内容较难检查,
- 尤其当您查找特定设备时更是如此。可以通过将该设备作为参数传递只获得特定设备的指标。
- # iostat sdaj
- Linux 2.6.9-55.0.9.ELlargesmp (prolin3) 12/27/2008
- avg-cpu: %user %nice %sys %iowait %idle
- 15.71 0.00 1.07 3.30 79.91
- Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
- sdaj 1.58 31.93 10.65 282355456 94172401
- 开始部分显示的 CPU 指标可能没什么用处。要取消在输出开始部分显示的与 CPU 有关的统计信息,使用 -d 选项。
- 可以将可选参数放在结尾处,让 iostat 以固定的时间间隔显示设备统计信息。要每隔 5 秒获取一次该设备的统计信息,共 10 次,执行以下命令:
- # iostat -d sdaj 5 10
- You can display the stats in kilobytes instead of just bytes using the -k option:
- # iostat -k -d sdaj
- Linux 2.6.9-55.0.9.ELlargesmp (prolin3) 12/27/2008
- Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
- sdaj 1.58 15.96 5.32 141176880 47085232
- 尽管以上输出可能非常有帮助,但很多信息并不容易显示。例如,磁盘问题的一个主要原因是磁盘服务时间,
- 即,磁盘将数据送达请求该数据的进程的时间。要获得该级别的指标,我们需要使用 -x 选项获得磁盘的“扩展”统计信息。
- # iostat -x sdaj
- Linux 2.6.9-55.0.9.ELlargesmp (prolin3) 12/27/2008
- avg-cpu: %user %nice %sys %iowait %idle
- 15.71 0.00 1.07 3.30 79.91
- Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
- sdaj 0.00 0.00 1.07 0.51 31.93 10.65 15.96 5.32 27.01 0.01 6.26 6.00 0.95
- 让我们看一看这些列的含义:
- rrqm/s 每秒合并的读请求数。磁盘请求排成队列。只要可能,内核就会尝试将多个请求合并成一个请求。
- 该指标测量读取传输的合并请求数。
- wrqm/s 与读取类似,这是合并的写请求数。
- r/s 每秒向该设备发出的读请求数
- w/s 同样,它是每秒向该设备发出的写请求数
- rsec/s 每秒从该设备读取的扇区数
- wsec/s 每秒写入该设备的扇区数
- rkB/s 每秒从该设备读取的数据,以 KB/秒为单位
- wkB/s 写入该设备的数据,以 kb/s 为单位
- avgrq-sz 读请求的平均大小(扇区数)
- avgqu-sz 该设备的请求队列的平均长度
- await 设备发出 I/O 请求经过的平均时间,以毫秒为单位。这是服务时间与队列中的等待时间的总和。
- svctm 设备的平均服务时间,以毫秒为单位
- %util 设备的带宽利用率。如果该值接近于 100%,则表明该设备已饱和。
- 用法
- 可以使用这些命令的组合从输出中获取一些有意义的信息。记住,在从进程获取请求时磁盘速度可能很慢。磁盘中的数据到达队列所花费的时间称为服务时间。如果您想找出服务时间最长的磁盘,执行以下命令:
- # iostat -x | sort -nrk13
- sdat 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 18.80 0.00 64.06 64.05 0.00
- sdv 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17.16 0.00 18.03 17.64 0.00
- sdak 0.00 0.00 0.00 0.14 0.00 1.11 0.00 0.55 8.02 0.00 17.00 17.00 0.24
- sdm 0.00 0.00 0.00 0.19 0.01 1.52 0.01 0.76 8.06 0.00 16.78 16.78 0.32
- ... and so on ...
- 这表明磁盘 sdat 的服务时间最长(64.05 毫秒)。为什么时间这么长呢?可能性很多,但最可能的原因有三个:
- 该磁盘获取了大量请求,以至于平均服务时间长。
- 该磁盘利用已移到可能的最大带宽。
- 该磁盘原本速度就很慢。
- 查看输出,我们看到读取数/秒和写入数/秒为 0.00(几乎没有发生任何事件),因此我们可以排除第一种可能性。
- 利用率也为 0.00%(最后一列),因此我们可以排除第二种可能性。这就剩下了第三种可能性。
- 但得出该磁盘原本速度慢的结论之前,我们需要更加仔细地观察该磁盘。
- 我们可以只检查该磁盘,每隔 5 秒 检查一次,共 10 次。
- # iostat -x sdat 5 10
- 如果输出显示相同的平均服务时间、读取速率和利用率,则可以断定最有可能是第三种情况。
- 如果这些数值发生了变化,我们可以获取更详细的线索来了解该设备服务时间较长的原因。
- 同样,可以对读取速率列进行排序,以显示处于恒定读取速率下的磁盘。
- # iostat -x | sort -nrk6
- sdj 0.00 0.00 1.86 0.61 56.78 12.80 28.39 6.40 28.22 0.03 10.69 9.99 2.46
- sdah 0.00 0.00 1.66 0.52 50.54 10.94 25.27 5.47 28.17 0.02 10.69 10.00 2.18
- sdd 0.00 0.00 1.26 0.48 38.18 11.49 19.09 5.75 28.48 0.01 3.57 3.52 0.61
- ... and so on ...
- 该信息可以帮助您查找“热”磁盘,即进行很多读取或写入的磁盘。如果该磁盘的确“热”,
- 则应确定“热”的原因;可能是该磁盘上定义的某个文件系统正在进行大量读取操作。如果是这种情况,
- 则应考虑将该文件系统在多个磁盘之间进行条带化,以分发负载,从而最大程度地减小某个特定磁盘“热”的可能性。
iostat 命令详解
最新推荐文章于 2025-03-04 15:16:27 发布