Percona-toolkit工具包系列文章
pt-diskstats是一个perl语言写的脚本,功能和iostat类似,给出磁盘的I/O统计信息。那么它和iostat又有什么不同呢?最大区别在于pt-diskstats可交互,输出信息更加详细,pt-diskstats可以按照不同方式聚合后输出。
pt-diskstats实质上是对/proc/diskstats做snapshot,然后进行相关计算后输出。那么/proc/diskstats又是什么东东呢。我们来捣鼓捣鼓 /proc/diskstats吧,随意取一份主机上的 /proc/diskstats文件下来。
pt-diskstats可以工作在两种模式下:
第一是工作在交互模式下,该模式下我们可以动态控制pt-diskstats的输出,立刻看到结果;
第二种是先收集/proc/diskstats的信息,存到一个文件里面,采集一段时候后再通过pt-diskstats来计算。
采集分析
这种模式下无人值守,用一个脚本再后台定时采集/proc/diskstats,采集完后我们用工具分析最终结果好了,最后我们可以得出该段时间内的整体IO性能,而不是瞬间的性能指标。
采集脚本如下:
#!/bin/bash INTERVAL=1 LOOPS=10 INT=1 echo `date` while (( $INT <= $LOOPS )) do Sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}") sleep $Sleep date +"TS %s.%N %F %T" >> diskstats-samples.txt cat /proc/diskstats >> diskstats-samples.txt let INT=INT+1 done echo `date`
/*采集时间自己改改LOOPS就好了,采集间隔修改INTERVAL即可,10代表10s*/
采集完后,生成一个很小的文本文件,这是我们可以使用pt-diskstats来对该输出做一些分析,统计出该段时间内,查看每块磁盘的IO活动(–group-disk)
脚本执行完成后,会生成一个diskstats-samples.txt的文件,下面就是用工具来分析这个文件中的内容
[root@VM_54_118_centos scripts]# pt-diskstats --group-by disk diskstats-samples.txt #ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg io_s qtime stime {9} vda 0.0 0.0 0.0 0% 0.0 0.0 1.1 15.6 0.0 74% 0.0 0.1 0% 0 1.1 0.1 0.0 {9} vda1 0.0 0.0 0.0 0% 0.0 0.0 1.1 15.6 0.0 74% 0.0 0.1 0% 0 1.1 0.1 0.0 {9} vdb 0.0 0.0 0.0 0% 0.0 0.0 0.2 14.0 0.0 71% 0.0 0.0 0% 0 0.2 0.0 0.0
输出说明:
#ts:如果按照disk聚合,该值代表到run的总时间,如果按照sample聚合,该值也代表当前run的时间,如果按照all聚合,代表两个快照间时间间隔。关于聚合,后面解释。
device:设备名
rd_s:实际发送到物理设备的读请求次数,该值一般情况下比实际应用请求次数小,因为在IO队列中,很多IO都被合并掉了。
rd_avkb:平均每次读请求的字节,单位KB/s,也就是单词次读数据量
rd_mb_s:该设备上的读取带宽,单位MB/s。ps:rd_s*rd_avkb=rd_mb_s
rd_mrg:被合并的读请求数占总的读请求数的百分比,越高越好
rd_cnc:读请求并发性
rd_rt:读请求平均响应时间
wr_s, wr_avkb, wr_mb_s, wr_mrg, wr_cnc, wr_rt和读请求一样,不赘述
busy:人们习惯称为设备的繁忙程度,暂且这么理解吧
in_prg:当前正在向底层物流设备提交的IO请求数目,如果该值不为0或者很大,那么你的设备负载很重
io_s:IOPS。ps:rd_s+wr_s=ios_s
qtime:IO请求排队时间(IO请求实际发到物理设备前有个排队过程)
stime:物理设备实际做物理读写所耗费的时间
知道每个字段什么意思了,我们现在想查看sdb-sdc两块盘在采集的时间段内的整体IO平均负载情况。
[root@VM_54_118_centos ~]# pt-diskstats --group-by disk --devices-regex vd[a-b] /wjqdata/mysql/scripts/diskstats-samples.txt #ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg io_s qtime stime {9} vda 0.0 0.0 0.0 0% 0.0 0.0 1.1 15.6 0.0 74% 0.0 0.1 0% 0 1.1 0.1 0.0 {9} vda1 0.0 0.0 0.0 0% 0.0 0.0 1.1 15.6 0.0 74% 0.0 0.1 0% 0 1.1 0.1 0.0 {9} vdb 0.0 0.0 0.0 0% 0.0 0.0 0.2 14.0 0.0 71% 0.0 0.0 0% 0 0.2 0.0 0.0
我还想查看该段时间内sdb的iops变化情况
[root@VM_54_118_centos ~]# pt-diskstats --group-by sample --devices-regex vd[b] --columns-regex io_s /wjqdata/mysql/scripts/diskstats-samples.txt #ts device io_s 1.0 vdb 0.0 2.0 vdb 0.0 3.0 vdb 0.0 4.0 vdb 0.0 5.0 vdb 2.0 6.0 vdb 0.0 7.0 vdb 0.0 8.0 vdb 0.0 9.0 vdb 0.0
[root@VM_54_118_centos ~]# pt-diskstats --devices-regex vd[a-z] --group-by sample #ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg io_s qtime stime 0.7 {3} 0.0 0.0 0.0 0% 0.0 0.0 11.8 11.0 0.1 64% 0.0 0.6 1% 0 11.8 0.0 0.6 1.7 {3} 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0 0.0 0.0 0.0 2.7 {3} 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0 0.0 0.0 0.0 3.7 {3} 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0 0.0 0.0 0.0 4.7 {3} 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0 0.0 0.0 0.0 5.7 {3} 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0 0.0 0.0 0.0 6.7 {3} 0.0 0.0 0.0 0% 0.0 0.0 8.0 19.0 0.1 79% 0.0 0.0 0% 0 8.0 0.0 0.0 7.7 {3} 0.0 0.0 0.0 0% 0.0 0.0 2.0 4.0 0.0 0% 0.0 0.0 0% 0 2.0 0.0 0.0 8.7 {3} 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0 0.0 0.0 0.0 9.7 {3} 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0 0.0 0.0 0.0 10.7 {3} 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0 0.0 0.0 0.0
查看帮助文档
按?就可以看到帮助文档,这些动作可以在改工具运行过程中调整具体配置,而不用停工具,在线调整。很棒吧
[root@VM_54_118_centos ~]# pt-diskstats --devices-regex vd[a-z] --group-by sample #ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg io_s qtime stime 0.4 {3} 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0 0.0 0.0 0.0 1.4 {3} 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0 0.0 0.0 0.0 2.4 {3} 0.0 0.0 0.0 0% 0.0 0.0 10.0 12.8 0.1 69% 0.0 0.2 0% 0 10.0 0.2 0.1 You can control this program by key presses: ------------------- Key ------------------- ---- Current Setting ---- A, D, S) Set the group-by mode S c) Enter a Perl regex to match column names . /) Enter a Perl regex to match disk names vd[a-z] z) Set the sample size in seconds 1 i) Hide inactive disks yes p) Pause the program q) Quit the program space) Print headers ------------------- Press any key to continue -----------------------
关于pt-diskstats的使用详细参考官方文档说明:
https://www.percona.com/doc/percona-toolkit/3.0/pt-diskstats.html