文章目录
- 一、简介
- 二、语法
- 三、示例
- 1、iostat -c
- 2、iostat -d
- 3、iostat -d -x -k
一、简介
iostat
是Linux系统上查看 I/O性能
最基本的工具,其全称为 I/O statistics
。
iostat
主要用于输出 磁盘IO
和 CPU
的统计信息。
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 ]
参数说明:
选项 | 说明 |
| 显示CPU统计信息,与-d选项互斥 |
| 显示磁盘统计信息,与-c选项互斥 |
| 以K为单位显示每秒的磁盘请求数,默认单位块 |
| 以K为单位显示每秒的磁盘请求数 |
| 显示磁盘阵列(LVM) 信息 |
| 在输出数据时,打印搜集数据的时间 |
| 打印版本号和帮助信息 |
| 显示详细信息 |
| 显示磁盘和分区的情况 |
三、示例
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使用情况
。
字段 | 说明 |
| CPU处在用户模式下的时间百分比 |
| CPU处在带NICE值的用户模式下的时间百分比 |
| CPU处在系统模式下的时间百分比 |
| CPU等待输入输出完成时间的百分比 |
| 管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比 |
| 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
项描述的是 系统磁盘
使用情况 。
字段 | 说明 |
| 该设备每秒的传输次数,“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”,“一次传输”请求的大小是未知的 |
| 每秒从设备(drive expressed)读取的数据量 |
| 每秒向设备(drive expressed)写入的数据量 |
| 读取的总数据量 |
| 写入的总数据量 |
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
说明:
字段 | 说明 |
| 每秒合并读操作的次数,如果两个读操作读取相邻的数据块时,可以被合并成一个,以提高效率。合并的操作通常是I/O scheduler(也叫elevator)负责的。 |
| 每秒合并写操作的次数 |
| 每秒读操作的次数 |
| 每秒写操作的次数 |
| 每秒读取的字节数(KB) |
| 每秒写入的字节数(KB) |
| 每个IO的平均扇区数,即所有请求的平均大小,以扇区(512字节)为单位 |
| 平均未完成的IO请求数量,即平均意义上的请求队列长度 |
| 平均每个IO所需要的时间,包括在队列等待的时间,也包括磁盘控制器处理本次请求的有效时间 |
| 每个读操作平均所需要的时间,不仅包括硬盘设备读操作的时间,也包括在内核队列中的时间 |
| 每个写操平均所需要的时间,不仅包括硬盘设备写操作的时间,也包括在队列中等待的时间 |
| 表面看是每个IO请求的服务时间,不包括等待时间,但是实际上,这个指标已经废弃。实际上,iostat工具没有任何一输出项表示的是硬盘设备平均每次IO的时间 |
| 表示该设备有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。