Linux磁盘IO监控工具-iostat

Linux磁盘IO监控工具-iostat

因为使用zabbix监控linux磁盘IO的需求,又折腾了会iostat

安装

iostat安装,直接用yum install iostat这是肯定会报错的,包不存在;iostat是包含在sysstat工具包中的一个工具,使用安装也就是:

1
yum install sysstat

简介

直接iostat输出:

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost yum.repos.d]# iostat
Linux 3.10.0-862.11.6.el7.x86_64 (localhost.localdomain) 12/21/2018 _x86_64_ (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.20 0.00 0.19 0.40 0.00 99.20

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 6.00 0.56 118.51 1200547 254018670
scd0 0.00 0.00 0.00 1028 0
dm-0 6.00 0.38 118.46 822151 253921784
dm-1 0.00 0.00 0.00 2228 0
dm-2 0.01 0.16 0.04 348695 9471

可以看见系统的基本信息,hostname,CPU数目,系统位数,以及:
一些CPU的信息:

1
2
3
4
5
6
7
8
9
%user:用户程序占用CPU时间百分比

%system:系统进程占CPU时间百分比

%nice:切换优先级的进程占CPU时间百分比

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

%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比

说实话,我是不太理解%steal…有个解释:Steal time is the percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor,差不多意思是你的虚拟机(VM)会与虚拟环境的宿主机上的多个虚拟机实例共享物理资源。其中之一共享的就是CPU时间切片。如果你的VM的物理机虚拟比是1/4, 那么它的CPU使用率不会限制于25%的CPU时间切片-它能够使用超过它设置的虚拟比。

通常我们会关注的部分:%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU

磁盘属性:

1
2
3
4
5
6
7
8
9
tps: 该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”

kB_read/s:每秒从设备(drive expressed)读取的数据量

kB_wrtn/s:每秒向设备(drive expressed)写入的数据量

kB_read:读取的总数据量

kB_wrtn:写入的总数量数据量

iostat语法

1
2
3
4
5
6
7
8
[root@localhost yum.repos.d]# iostat --help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
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 ]

1
2
3
4
5
6
-c    只显示CPU利用率
-d 只显示磁盘利用率
-p 可以报告出每块磁盘的每个分区的使用情况
-k 以 KB/秒 为单位显示磁盘利用率报告
-x 显示详细信息
-n 显示NFS(network filesystem)报告

常用操作

1
2
3
4
5
6
7
8
9
[root@localhost yum.repos.d]# iostat -d -k -x 2
Linux 3.10.0-862.11.6.el7.x86_64 (localhost.localdomain) 12/21/2018 _x86_64_ (4 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.01 0.02 5.98 0.56 118.53 39.70 0.12 20.63 5.10 20.69 6.29 3.77
scd0 0.00 0.00 0.00 0.00 0.00 0.00 114.22 0.00 37.06 37.06 0.00 36.56 0.00
dm-0 0.00 0.00 0.01 5.99 0.38 118.48 39.59 0.12 20.72 6.26 20.76 6.28 3.77
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 47.40 0.00 8.22 8.22 0.00 7.71 0.00
dm-2 0.00 0.00 0.01 0.00 0.16 0.04 50.37 0.00 55.11 3.29 178.62 2.30 0.00

参数含义:

1
2
3
4
5
6
7
8
9
10
11
12
13
rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数.即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数.即 delta(wio)/s
rsec/s: 每秒读扇区数.即 delta(rsect)/s
wsec/s: 每秒写扇区数.即 delta(wsect)/s
rkB/s: 每秒读K字节数.是 rsect/s 的一半,因为每扇区大小为512字节.(需要计算)
wkB/s: 每秒写K字节数.是 wsect/s 的一半.(需要计算)
avgrq-sz:平均每次设备I/O操作的数据大小 (扇区).delta(rsect+wsect)/delta(rio+wio)
avgqu-sz:平均I/O队列长度.即 delta(aveq)/s/1000 (因为aveq的单位为毫秒).
await: 平均每次设备I/O操作的等待时间 (毫秒).即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒).即 delta(use)/delta(rio+wio)
%util: 在 I/O 请求发送到设备期间,占用 CPU 时间的百分比。用于体现设备的带宽利用率。

当%util接近100%时,设备宽带已满

参考blog

iostat 监视I/O子系统

Linux磁盘I/O性能监控之iostat详解

文章目录
  1. 安装
  2. 简介
  3. iostat语法
  4. 常用操作
  5. 参考blog
|