Linux磁盘IO监控工具-iostat
因为使用zabbix监控linux磁盘IO的需求,又折腾了会iostat
安装 iostat安装,直接用yum install iostat
这是肯定会报错的,包不存在;iostat是包含在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详解