iostat使用心得
iostat用于输出CPU和磁盘I/O相关的统计信息.
命令格式:
iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ device [ ... ] | ALL ] [ -p [ device | ALL ] ]
[ interval [ count ] ]
-c 仅显示CPU统计信息.与-d选项互斥. -d 仅显示磁盘统计信息.与-c选项互斥. -k 以K为单位显示每秒的磁盘请求数,默认单位块. -p device | ALL 与-x选项互斥,用于显示块设备及系统分区的统计信息.也可以在-p后指定一个设备名,如: # iostat -p hda 或显示所有设备 # iostat -p ALL -t 在输出数据时,打印搜集数据的时间. -V 打印版本号和帮助信息. -x 输出扩展信息.
常用:
iostat -dx 1
iostat
rrqm/s:read request merge将读入请求合并后,每秒发送到设备的读入请求数.读取时等几秒过程中,有多少块是连续的,连续的块将merge一起来读取;这个可以看到业务的关系,是不是连续的读,越大说明越多连续读。 wrqm/s:将写入请求合并后,每秒发送到设备的写入请求数,也能说明业务关系,当该值很大时,说明可以考虑将块划分大一点。 r/s:每秒读取的次数。 w/s:每秒写入的次数。 rkB/s:读取多少kB每秒。 wkB/s:写入多少kB每秒。 avgrq-sz:average request size 发送到设备的请求的平均大小,单位是扇区,一个扇区一般为512B,16个扇区为8KB。上述就是438*8=3504。 avgqu-sz:发送到设备的请求的平均队列长度 await:I/O请求平均执行时间.包括发送请求和执行的时间.单位是毫秒。 r_await:读的平均耗时。 w_await:写入平均耗时。 svctm:发送到设备的I/O请求的平均执行时间.单位是毫秒。 %util:队列不为空的占比,一定程度可以反映系统是否繁忙。在I/O请求发送到设备期间,占用CPU时间的百分比.用于显示设备的带宽利用率。 Blk_read:读入块的当总数. Blk_wrtn:写入块的总数. kB_read/s:每秒从驱动器读入的数据量,单位为K. kB_wrtn/s:每秒向驱动器写入的数据量,单位为K. kB_read:读入的数据总量,单位为K. kB_wrtn:写入的数据总量,单位为K. rsec/s:每秒从设备读入的扇区数. wsec/s:每秒向设备写入的扇区数.
await的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。
如果 svctm 比较接近 await,说明I/O 几乎没有等待时间;
如果 await 远大于 svctm,说明 I/O队列太长,应用得到的响应时间变慢,
如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator算法,优化应用,或者升级 CPU。
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水
svctm:每次io设备的服务时间(毫秒),它的大小一般和磁盘性能有关:CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加
%util:处理io操作的cpu比例,如果这个着接近100%,说明io请求非常多,cpu的所有时间都用来处理io请求,io系统负载很大(也有可能cpu资源不足),磁盘可能存在瓶颈;在%util等于70%的时候,io的读取就会有很多等待。
~$ iostat -dx 1 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util zfsds0 0.00 0.00 0.00 438.00 0.00 3504.00 16.00 1.00 4.57 0.00 2.28 2.28 100.00
iostat
~$ iostat
第一部分包含了CPU报告 %user : 显示了在执行用户(应用)层时的CPU利用率 %nice : 显示了在以nice优先级运行用户层的CPU利用率 %system : 显示了在执行系统(内核)层时的CPU利用率 %iowait : 显示了CPU在I/O请求挂起时空闲时间的百分比 %steal : 显示了当hypervisor正服务于另外一个虚拟处理器时无意识地等待虚拟CPU所占有的时间百分比。 %idle : 显示了CPU在I/O没有挂起请求时空闲时间的百分比 第二部分包含了设备利用率报告 Device : 列出的/dev 目录下的设备/分区名称 tps : 显示每秒传输给设备的数量。更高的tps意味着处理器更忙。 Blk_read/s : 显示了每秒从设备上读取的块的数量(KB,MB) Blk_wrtn/s : 显示了每秒写入设备上块的数量(KB,MB) Blk_read : 显示所有已读取的块 Blk_wrtn : 显示所有已写入的块
严以律己、宽以待人