文章目录

  • 一、简介
  • 二、语法
  • 三、示例
  • 1、iostat -c
  • 2、iostat -d
  • 3、iostat -d -x -k




一、简介

iostat 是Linux系统上查看 I/O性能 最基本的工具,其全称为 I/O statistics

iostat 主要用于输出 磁盘IOCPU 的统计信息。

iostat 有以下缺陷:

  • iostat 的输出结果大多数是 一段时间内的平均值,因此难以反映峰值情况;
  • iostat 仅能对 系统整体情况进行分析汇报,却不能针对某个进程进行深入分析;
  • iostat 未单独统计IO处理信息,而是 将IO处理时间IO等待时间 合并统计,因此包括await在内的指标并不能非常准确地衡量磁盘性能表现。


二、语法

# iostat -help
Usage: iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]
Options are:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ [ -T ] -g <group_name> ] [ -p [ <device> [,...] | ALL ] ]
[ <device> [...] | ALL ]

参数说明:

选项

说明

-c

显示CPU统计信息,与-d选项互斥

-d

显示磁盘统计信息,与-c选项互斥

-k

以K为单位显示每秒的磁盘请求数,默认单位块

-m

以K为单位显示每秒的磁盘请求数

-N

显示磁盘阵列(LVM) 信息

-t

在输出数据时,打印搜集数据的时间

-V

打印版本号和帮助信息

-x

显示详细信息

-p

显示磁盘和分区的情况


三、示例

1、iostat -c

命令:

iostat -c

输出:

Linux 3.10.0-957.el7.x86_64 (docp010000007115)  11/24/2022      _x86_64_        (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           7.16    0.00    2.70    0.13    6.92   83.09

说明:

avg-cpu 描述的是 系统cpu使用情况

字段

说明

%user

CPU处在用户模式下的时间百分比

%nice

CPU处在带NICE值的用户模式下的时间百分比

%system

CPU处在系统模式下的时间百分比

%iowait

CPU等待输入输出完成时间的百分比

%steal

管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比

%idle

CPU空闲时间百分比

备注:

  • %iowait 的值过高,表示硬盘存在I/O瓶颈;
  • %idle 值高,表示CPU较空闲;
  • %idle 值高但系统响应慢时,可能是CPU等待分配内存,应加大内存容量;
  • %idle持续低于10%,表明 CPU处理能力相对较低,系统中最需要解决的资源是CPU;


2、iostat -d

命令:

iostat -d

输出:

Linux 3.10.0-957.el7.x86_64 (docp010000007115)  11/24/2022      _x86_64_        (8 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              18.10         9.85       281.83  116143476 3322761606
scd1              0.00         0.00         0.00        198          0
dm-0              0.83         3.36         9.24   39619595  108967388
dm-1              0.02         0.01         0.07     173940     772676
dm-2             13.98         6.47       272.52   76318168 3213006082

说明:

Device 项描述的是 系统磁盘 使用情况 。

字段

说明

tps

该设备每秒的传输次数,“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”,“一次传输”请求的大小是未知的

kB_read/s

每秒从设备(drive expressed)读取的数据量

kB_wrtn/s

每秒向设备(drive expressed)写入的数据量

kB_read

读取的总数据量

kB_wrtn

写入的总数据量


3、iostat -d -x -k

命令:

iostat -d -x -k

输出:

Linux 3.10.0-957.el7.x86_64 (docp010000007115)  11/24/2022      _x86_64_        (8 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.49    0.56   17.54     9.85   281.83    32.23     0.06    3.40   10.54    3.17   1.29   2.33
scd1              0.00     0.00    0.00    0.00     0.00     0.00     7.33     0.00    0.96    0.96    0.00   0.96   0.00
dm-0              0.00     0.00    0.08    0.75     3.36     9.24    30.46     0.00    4.61   11.05    3.95   0.71   0.06

说明:

字段

说明

rrqm/s

每秒合并读操作的次数,如果两个读操作读取相邻的数据块时,可以被合并成一个,以提高效率。合并的操作通常是I/O scheduler(也叫elevator)负责的。

wrqm/s

每秒合并写操作的次数

r/s

每秒读操作的次数

w/s

每秒写操作的次数

rkB/s

每秒读取的字节数(KB)

wkB/s

每秒写入的字节数(KB)

avgrq-sz

每个IO的平均扇区数,即所有请求的平均大小,以扇区(512字节)为单位

avgqu-sz

平均未完成的IO请求数量,即平均意义上的请求队列长度

await

平均每个IO所需要的时间,包括在队列等待的时间,也包括磁盘控制器处理本次请求的有效时间

r_await

每个读操作平均所需要的时间,不仅包括硬盘设备读操作的时间,也包括在内核队列中的时间

w_await

每个写操平均所需要的时间,不仅包括硬盘设备写操作的时间,也包括在队列中等待的时间

svctm

表面看是每个IO请求的服务时间,不包括等待时间,但是实际上,这个指标已经废弃。实际上,iostat工具没有任何一输出项表示的是硬盘设备平均每次IO的时间

%util

表示该设备有I/O(即非空闲)的时间比率,不考虑I/O有多少,只考虑有没有

备注:

  • %util 表示该设备有i/o非空闲的时间比率,不考虑i/o有多少,由于硬盘设备有并行处理多个i/o请求的能力,所以%util即使达到100%也不意味着设备饱和了。
  • svctm 一般要小于await(因为同时等待的请求的等待时间被重复计算了),svctm的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致svctm的增加。
  • await 的大小一般取决于服务时间(svctm)以及I/O队列的长度和I/O请求的发出模式
  • svctm 比较接近 await,说明I/O几乎没有等待时间;
  • await 远大于 svctm,说明I/O队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,md调整内核elevator算法,优化应用,或者升级CPU。