系列专题:Linux运维入门教程
Linux系统中的iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
本文包括iostat的安装、用法、常用参数和解析。
1、安装
看提供iostat的软件包
代码语言:javascript复制[root@devvm ~]# yum provides */iostat
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.bupt.edu.cn
* extras: ftp.sjtu.edu.cn
* updates: ftp.sjtu.edu.cn
pcp-4.3.2-12.el7.x86_64 : System-level performance monitoring and performance management
Repo : base
Matched from:
Filename : /var/lib/pcp/config/pmlogconf/tools/iostat
pcp-4.3.2-13.el7_9.x86_64 : System-level performance monitoring and performance management
Repo : updates
Matched from:
Filename : /var/lib/pcp/config/pmlogconf/tools/iostat
pcp-testsuite-4.3.2-12.el7.x86_64 : Performance Co-Pilot (PCP) test suite
Repo : base
Matched from:
Filename : /var/lib/pcp/testsuite/sadist/iostat
pcp-testsuite-4.3.2-13.el7_9.x86_64 : Performance Co-Pilot (PCP) test suite
Repo : updates
Matched from:
Filename : /var/lib/pcp/testsuite/sadist/iostat
sysstat-10.1.5-19.el7.x86_64 : Collection of performance monitoring tools for Linux
Repo : base
Matched from:
Filename : /usr/bin/iostat
[root@devvm ~]#
可以选择pcp或sysstat
代码语言:javascript复制[root@devvm ~]# yum install sysstat -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.bupt.edu.cn
* extras: ftp.sjtu.edu.cn
* updates: ftp.sjtu.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package sysstat.x86_64 0:10.1.5-19.el7 will be installed
--> Processing Dependency: libsensors.so.4()(64bit) for package: sysstat-10.1.5-19.el7.x86_64
--> Running transaction check
---> Package lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=======================================================================================================
Package Arch Version Repository Size
=======================================================================================================
Installing:
sysstat x86_64 10.1.5-19.el7 base 315 k
Installing for dependencies:
lm_sensors-libs x86_64 3.4.0-8.20160601gitf9185e5.el7 base 42 k
Transaction Summary
=======================================================================================================
Install 1 Package ( 1 Dependent package)
Total download size: 357 k
Installed size: 1.2 M
Downloading packages:
(1/2): lm_sensors-libs-3.4.0-8.20160601gitf9185e5.el7.x86_64.rpm | 42 kB 00:00:00
(2/2): sysstat-10.1.5-19.el7.x86_64.rpm | 315 kB 00:00:00
-------------------------------------------------------------------------------------------------------
Total 1.1 MB/s | 357 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : lm_sensors-libs-3.4.0-8.20160601gitf9185e5.el7.x86_64 1/2
Installing : sysstat-10.1.5-19.el7.x86_64 2/2
Verifying : sysstat-10.1.5-19.el7.x86_64 1/2
Verifying : lm_sensors-libs-3.4.0-8.20160601gitf9185e5.el7.x86_64 2/2
Installed:
sysstat.x86_64 0:10.1.5-19.el7
Dependency Installed:
lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7
Complete!
[root@devvm ~]#
2. 用法
语法
iostat [选项] [<时间间隔>] [<次数>]
参数说明
- -c: 显示CPU使用情况
- -d: 显示磁盘使用情况
- -N: 显示磁盘阵列(LVM) 信息
- -n: 显示NFS 使用情况
- -k: 以 KB 为单位显示
- -m: 以 M 为单位显示
- -t: 报告每秒向终端读取和写入的字符数和CPU的信息
- -V: 显示版本信息
- -x: 显示详细信息
- -p:[磁盘] 显示磁盘和分区的情况
3. 实践
3.1 常用参数
代码语言:javascript复制[root@devvm ~]$ iostat -x
Linux...
avg-cpu: %user %nice %system %iowait %steal %idle
2.49 0.00 0.52 0.10 0.00 96.89
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.06 4.00 0.44 2.70 11.96 44.78 36.11 0.03 10.64 9.33 10.86 0.73 0.23
cpu字段说明:
%user:CPU处在用户模式下的时间百分比。 %nice:CPU处在带NICE值的用户模式下的时间百分比。 %system:CPU处在系统模式下的时间百分比。 %iowait:CPU等待输入输出完成时间的百分比。 %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。 %idle:CPU空闲时间百分比。 注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
磁盘字段说明:
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 操作,或者说一秒中有多少时间 I/O 队列是非空的。
4.性能指标分析
代码语言:javascript复制[root@RedHat ~]# iostat -xdk 1 10 | egrep "sda|Device"
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 10.66 23.71 8.46 4.46 243.03 211.25 70.30 0.43 32.87 8.64 11.17
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 25.00 0.00 12800.00 1024.00 7.27 327.76 39.40 98.50
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 19.00 0.00 9728.00 1024.00 7.24 322.26 51.79 98.40
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 1.00 36.00 4.00 13852.00 748.97 7.58 105.14 26.30 97.30
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 27.27 0.00 13963.64 1024.00 8.86 488.37 36.63 99.90
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 21.00 0.00 10752.00 1024.00 7.12 330.81 46.86 98.40
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 9.00 0.00 4608.00 1024.00 4.18 761.44 79.56 71.60
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 8.00 0.00 24.00 6.00 0.11 14.12 14.12 11.30
[root@RedHat ~]#
重要参数解析:util,svctm,await,avgqu-sz:
util是设备的利用率。如果它接近100%,通常说明设备能力趋于饱和(并不绝对,比如设备有写缓存)。有时候可能会出现大于100%的情况,这多半是计算时四舍五入引起的,但如果是磁盘阵列等多盘系统,因为具有并发IO操作的能力,也会出现大于100%的情况。
svctm是平均每次请求的服务时间。从源代码里可以看出:(r/s w/s)*(svctm/1000)=util。举例子:如果util达到100%,那么此时svctm=1000/(r/s w/s),假设IOPS是1000,那么svctm大概在1毫秒左右,如果长时间大于这个数值,说明系统出了问题。不过前面已经说过在磁盘阵列等多盘系统中util可能出现偏大的情况,所以svctm相应的也可能偏大。
await是平均每次请求的等待时间。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
avgqu-sz是平均请求队列的长度。毫无疑问,队列长度越短越好。
如果%util接近100%且,表明IO请求太多,IO系统已经满负荷,磁盘可能存在瓶颈,但是并不是更改存储设备就能提高性能的;(最近,经历一个实践,%util是100%,svctm为6~7毫秒,但是就存储系统分开部署于两个存储设备上,却依旧为100%,并且svctm也为6~7毫秒,IO状态信息没有多大的改变。说明现在可以通过软件层面进行调优)。
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。
await 的大小一般取决于服务时间(svctm) 以及I/O 队列的长度和 I/O 请求的发出模式。
如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/185436.html原文链接:https://javaforall.cn