一、简介

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使用情况

字段说明
%userCPU处在用户模式下的时间百分比
%niceCPU处在带NICE值的用户模式下的时间百分比
%systemCPU处在系统模式下的时间百分比
%iowaitCPU等待输入输出完成时间的百分比
%steal管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
%idleCPU空闲时间百分比

备注:

  • %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。

GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐