iostat用来监控调试linux系统的IO性能。
一般用法:
iostat -xdct time_interval count [disk]
-x:显示扩展统计项,如果不使用-x参数只会打印基本统计
-d:显示磁盘占用率
-c:显示CPU占用率
示例:
注意点:第一条输出表示从启动开始的统计信息,从第二条开始表示time_interval内的统计信息
参数介绍:
avg-cpu:
- %user:CPU处在用户模式下的时间百分比。
- %nice:CPU处在带NICE值的用户模式下的时间百分比。
- %system:CPU处在系统模式下的时间百分比。
- %iowait:CPU等待输入输出完成时间的百分比。---因为iostat是为了监控IO性能设计的,所以着重关注iowait
- %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
- %idle:CPU空闲时间百分比。
Device:
- rrqm/s: 每秒进行 merge 的读操作数目---merge的意思是将几个小批量且连续的IO访问合并
- wrqm/s: 每秒进行 merge 的写操作数目
- r/s: 每秒发起的读请求次数
- w/s: 每秒发起的写请求次数
- rsec/s: 每秒读扇区数,一个扇区512字节
- wsec/s: 每秒写扇区数,一个扇区512字节
- avgrq-sz: 平均每次设备 I/O 操作的数据大小(以扇区为单位)
- avgqu-sz: 平均 I/O 队列长度---IO队列越长代表等待被执行的IO操作越多
- await: 平均每次设备 I/O 操作的等待时间(毫秒)---等待时间 = 队列中等待时间 + 服务时间
- svctm: 平均每次设备 I/O 操作的服务时间(毫秒)---不要相信这个值
- %util: IO操作的CPU占用率
典型问题:
IO问题综合表述都是IO操作消耗了过多的CPU资源,出现下面情况可以认为设备的IO需要优化:
- %iowait,%util,avgqu-sz高或者高出平均值
- r/s w/s持续高或者高出平均值
- avgqu-sz高
优化方向:
- 应用程序优化,减少IO操作次数
- 使用多块磁盘,将针对大块磁盘的大量读写优化为针对多块磁盘的同样量读写
- 增加文件系统inode cache数量
- 使用固态硬盘提高读写速度