doc: Update iostat.md (#599)
从 Linux 2.6.18 内核的 iostat 更新到 4.18.0 内核的 iostat。并参数说明和示例
This commit is contained in:
parent
d88ec7ce3e
commit
7155c78adc
|
|
@ -1,74 +1,178 @@
|
|||
iostat
|
||||
===
|
||||
# iostat
|
||||
|
||||
监视系统输入输出设备和CPU的使用情况
|
||||
iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
|
||||
iowait 指在一个采样周期内有百分之几的时间是属于以下情况:CPU处于空闲状态并且至少有一个未完成的磁盘IO请求。
|
||||
|
||||
## 补充说明
|
||||
## 安装 iostat
|
||||
|
||||
**iostat命令** 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
|
||||
iostat包含在**sysstat**包内。如果你没有,你首先需要安装它。
|
||||
在 RedHat / CentOS / Fedora
|
||||
|
||||
### 语法
|
||||
```bash
|
||||
yum install sysstat
|
||||
```
|
||||
|
||||
```shell
|
||||
在 Debian / Ubuntu / Linux Mint
|
||||
|
||||
```bash
|
||||
sudo apt-get install sysstat
|
||||
```
|
||||
|
||||
## 语法
|
||||
|
||||
```bash
|
||||
iostat(选项)(参数)
|
||||
```
|
||||
|
||||
### 选项
|
||||
|
||||
```shell
|
||||
-c:仅显示CPU使用情况;
|
||||
-d:仅显示设备利用率;
|
||||
-k:显示状态以千字节每秒为单位,而不使用块每秒;
|
||||
-m:显示状态以兆字节每秒为单位;
|
||||
-p:仅显示块设备和所有被使用的其他分区的状态;
|
||||
-t:显示每个报告产生时的时间;
|
||||
-V:显示版号并退出;
|
||||
-x:显示扩展状态。
|
||||
```bash
|
||||
# iostat --help
|
||||
Usage: iostat [ options ] [ <interval> [ <count> ] ]
|
||||
Options are:
|
||||
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -s ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
|
||||
[ -j { ID | LABEL | PATH | UUID | ... } ] [ --human ] [ -o JSON ]
|
||||
[ [ -H ] -g <group_name> ] [ -p [ <device> [,...] | ALL ] ]
|
||||
```
|
||||
|
||||
参数说明:
|
||||
```
|
||||
-c 输出CPU统计信息。不能与-d参数同时使用。
|
||||
-d 输出设备和分区的I/O统计信息。不能与-c参数同时使用。(默认的参数是-d)。
|
||||
-h 让人类更容易阅读设备使用情况报告。--human使用此选项隐式启用。
|
||||
-k 用“kbytes/秒”代替“块/秒”显示统计信息。
|
||||
-m 用“mbytes/秒”代替“块/秒”显示统计信息。
|
||||
-t 打印显示的每份报告的时间。
|
||||
-V 显示版本号并退出。
|
||||
-x 显示扩展统计信息。不能与参数-p同时使用。
|
||||
-y 如果在给定时间间隔内显示多条记录,则省略自系统启动以来的第一份统计报告。
|
||||
-z 告诉 iostat 忽略在样本期间没有活动的设备的输出。
|
||||
-j 显示持久的设备名称。选项ID、LABEL等指定持久名称的类型。
|
||||
--human 以人类可读格式打印大小(例如1.0k, 1.2M等)。使用此选项显示的单位取代与度量相关的任何其他默认单位(例如千字节,扇区…)。
|
||||
-o 以JSON (Javascript Object Notation)格式显示统计数据。JSON输出字段顺序未定义,未来可能会添加新字段。
|
||||
-H 该选项必须与-g一起使用,表示只显示组的全局统计信息,而不显示组中单个设备的统计信息。
|
||||
-p 选项显示系统使用的块设备及其所有分区的统计信息。如果在命令行中输入一个设备名,那么将显示该设备及其所有分区的统计信息。最后,ALL关键字表示必须显示系统定义的所有块设备和分区的统计信息,包括那些从未使用过的设备和分区。如果在此选项之前定义了选项-j,则可以使用所选的持久名称类型指定在命令行上输入的设备。
|
||||
```
|
||||
|
||||
### 参数
|
||||
|
||||
* 间隔时间:每次报告的间隔时间(秒);
|
||||
* 次数:显示报告的次数。
|
||||
interval 刷新时间间隔
|
||||
count 刷新次数
|
||||
|
||||
### 实例
|
||||
## 运行示例
|
||||
|
||||
用`iostat -x /dev/sda1`来观看磁盘I/O的详细情况:
|
||||
### 示例1
|
||||
|
||||
```shell
|
||||
iostat -x /dev/sda1
|
||||
Linux 2.6.18-164.el5xen (localhost.localdomain)
|
||||
2010年03月26日
|
||||
```bash
|
||||
# iostat
|
||||
Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU)
|
||||
|
||||
avg-cpu: %user %nice %system %iowait
|
||||
%steal %idle
|
||||
0.11 0.02 0.18 0.35
|
||||
0.03 99.31
|
||||
avg-cpu: %user %nice %system %iowait %steal %idle
|
||||
3.30 0.01 1.90 0.12 0.00 94.68
|
||||
|
||||
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
|
||||
vda 7.85 84.22 36.59 1081853831 470049100
|
||||
|
||||
Device: tps Blk_read/s Blk_wrtn/s
|
||||
Blk_read Blk_wrtn
|
||||
sda1 0.02 0.08
|
||||
0.00 2014 4
|
||||
```
|
||||
|
||||
详细说明:第二行是系统信息和监测时间,第三行和第四行显示CPU使用情况(具体内容和mpstat命令相同)。这里主要关注后面I/O输出的信息,如下所示:
|
||||
第一部分包含了CPU报告
|
||||
|
||||
| 性能指标 | 含义 |
|
||||
| --- | --- |
|
||||
| %user | 显示在用户级(应用程序)执行时发生的CPU利用率百分比。 |
|
||||
| %nice | 显示在具有nice优先级的用户级别执行时发生的CPU利用率百分比。 |
|
||||
| %system | 显示在系统级(内核)执行时发生的CPU利用率百分比。 |
|
||||
| %iowait | 显示在系统有未完成的磁盘I/O请求期间CPU空闲的时间百分比。 |
|
||||
| %steal | 显示虚拟机监控程序为另一个虚拟处理器提供服务时,一个或多个虚拟CPU在非自愿等待上花费的时间百分比。 |
|
||||
| %idle | 显示CPU空闲且系统没有未完成的磁盘I/O请求的时间百分比。 |
|
||||
|
||||
标示 | 说明
|
||||
--- | ---
|
||||
Device | 监测设备名称
|
||||
rrqm/s | 每秒需要读取需求的数量
|
||||
wrqm/s | 每秒需要写入需求的数量
|
||||
r/s | 每秒实际读取需求的数量
|
||||
w/s | 每秒实际写入需求的数量
|
||||
rsec/s | 每秒读取区段的数量
|
||||
wsec/s | 每秒写入区段的数量
|
||||
rkB/s | 每秒实际读取的大小,单位为KB
|
||||
wkB/s | 每秒实际写入的大小,单位为KB
|
||||
avgrq-sz | 需求的平均大小区段
|
||||
avgqu-sz | 需求的平均队列长度
|
||||
await | 等待I/O平均的时间(milliseconds)
|
||||
svctm | I/O需求完成的平均时间
|
||||
%util | 设备带宽的使用率,达到100%表示饱和,达到性能瓶颈,如果是支持处理并发请求的设备则不代表性能瓶颈。
|
||||
第二部分包含了设备利用率报告
|
||||
|
||||
| 性能指标 | 含义 |
|
||||
| --- | --- |
|
||||
| Device | 此列给出了 /dev 目录中列出的设备(或分区)名称。 |
|
||||
| tps | 表示每秒向设备发出的传输次数。传输是对设备的 I/O 请求。多个逻辑请求可合并为对设备的一个 I/O 请求。传输大小不确定。 |
|
||||
| kB_read/s | 表示每秒从设备读取的数据量,以块数(千字节、兆字节)表示。块相当于扇区,因此大小为 512 字节。 |
|
||||
| kB_wrtn/s | 表示写入设备的数据量,以每秒块数(千字节、兆字节)表示。 |
|
||||
| kB_read | 读取的数据块总数(千字节、兆字节)。 |
|
||||
| kB_wrtn | 写入的数据块总数(千字节、兆字节)。 |
|
||||
|
||||
### 示例2
|
||||
|
||||
以更友好的显示方式显示 IO 信息,使用`-y`忽略第一份统计。并每隔 1 秒重新一次,共5次。
|
||||
|
||||
```bash
|
||||
# iostat -hdy 1 5
|
||||
Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU)
|
||||
|
||||
tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
|
||||
64.00 288.0k 308.0k 288.0k 308.0k vda
|
||||
|
||||
tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
|
||||
12.00 0.0k 84.0k 0.0k 84.0k vda
|
||||
|
||||
tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
|
||||
15.00 0.0k 36.0k 0.0k 36.0k vda
|
||||
|
||||
tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
|
||||
28.00 0.0k 76.0k 0.0k 76.0k vda
|
||||
|
||||
tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
|
||||
11.00 0.0k 100.0k 0.0k 100.0k vda
|
||||
|
||||
```
|
||||
|
||||
### 示例3
|
||||
|
||||
```bash
|
||||
# iostat -xd 1
|
||||
Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU)
|
||||
|
||||
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
|
||||
vda 4.64 3.21 84.14 36.59 0.28 1.07 5.64 25.01 5.86 8.23 0.05 18.12 11.41 0.44 0.34
|
||||
|
||||
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
|
||||
vda 1.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 4.00 0.00 2.00 0.20
|
||||
|
||||
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
|
||||
vda 0.00 37.00 0.00 395.50 0.00 10.00 0.00 21.28 0.00 0.92 0.03 0.00 10.69 0.11 0.40
|
||||
|
||||
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
|
||||
vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
|
||||
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
|
||||
vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
|
||||
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
|
||||
vda 1.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 4.00 0.00 1.00 0.10
|
||||
|
||||
```
|
||||
|
||||
从这里你可以看到,iostat 提供了非常丰富的性能指标。第一列的 Device 表示磁盘设备的名字,其他各列指标,虽然数量较多,但是每个指标的含义都很重要。
|
||||
|
||||
| 性能指标 | 含义 |
|
||||
| --- | --- |
|
||||
| r/s | 设备每秒完成的读取请求数(合并后)。 |
|
||||
| w/s | 设备每秒完成的写入请求数(合并后)。 |
|
||||
| rkB/s | 每秒从设备读取的扇区数(千字节、兆字节)。 |
|
||||
| wkB/s | 每秒写入设备的扇区数(千字节、兆字节)。 |
|
||||
| rrqm/s | 每秒合并到设备的排队 I/O 请求数。 |
|
||||
| wrqm/s | 每秒合并到设备的写入请求数。 |
|
||||
| %rrqm | 在发送到设备之前合并在一起的读取请求的百分比。 |
|
||||
| %wrqm | 发送到设备前合并在一起的写入请求的百分比。 |
|
||||
| r_await | 向设备发出的读取请求获得服务的平均时间(毫秒)。这包括请求在队列中花费的时间和为请求提供服务的时间。 |
|
||||
| w_await | 向待服务设备发出写入请求的平均时间(毫秒)。这包括请求在队列中花费的时间和为请求提供服务的时间。 |
|
||||
| aqu-sz | 向设备发出的请求的平均队列长度。注意:在以前的版本中,该字段被称为 avgqu-sz。 |
|
||||
| rareq-sz | 向设备发出的读取请求的平均大小(千字节)。 |
|
||||
| wareq-sz | 向设备发出的写入请求的平均大小(千字节)。 |
|
||||
| svctm | 向设备发出的 I/O 请求的平均服务时间(毫秒)。警告!不要再相信这个字段了。 未来的 sysstat 版本将删除此字段。 |
|
||||
| %util | 向设备发出 I/O 请求所用时间的百分比(设备带宽利用率)。 对于串行服务请求的设备,当该值接近 100%,设备就会饱和。 但对于以并行方式提供请求的设备,如 RAID 阵列和现代固态硬盘,该数值并不能反映其性能极限。 |
|
||||
|
||||
当 %iowait 升高,需要重点关注以下指标:
|
||||
|
||||
- avgrq-sz: 向设备发出请求的平均大小(单位:扇区)
|
||||
- avgqu-sz: 向设备发出请求的队列平均长度。也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小.如果数据拿的大,IO 的数据会高
|
||||
- r_await: 向服务设备发出读取请求的平均时间(单位:毫秒)。包括请求入队的时间以及设备处理请求的时间
|
||||
- w_await: 向服务设备发出写请求的平均时间(单位:毫秒)。包括请求入队的时间以及设备处理请求的时间
|
||||
- %util:一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈
|
||||
- %svctm:平均每次设备 I/O 操作的服务时间 (毫秒)。一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU
|
||||
|
|
|
|||
Loading…
Reference in New Issue