一、通过脚本分析IO的读/写数量、最大延迟、延迟的分布情况、块大小及数量
#!/bin/sh # # File Name : count_io.sh # Time : 2020-07-29-11:24:28 # Author : Lucky # QQ : 1151574975 if [ $UID != "0" ];then echo "Please execute as root user." exit 1 fi if [ $# -ne 1 ];then echo "Usage: $0 <block_device_name>" exit 1 fi if [ ! -b $1 ];then echo "Can't find block device" exit 1 fi DEVICE_NAME=$(basename $1) blkparse -i $DEVICE_NAME | sort -g -k8 -k10 -k4 | awk ' BEGIN{ total_read=0; total_write=0; maxwait_read=0; maxwait_write=0; } # 计算Q--C中间的IO等待延时,此处Q赋值 { if ($6=="Q") { start_time=$4; block=$8; update_block=$10; action=$7; }; # 此处C值比较,得出IO等待值 if ($6=="C" && $8==block && $10==update_block && $7==action) { await=$4-update_block; # IO读等待赋值 if (action=="R") { if (await>maxwait_read) maxwait_read=await; total_read++; read_count_block[update_block]++; if (await>0.001) read_count1++; if (await>0.01) read_count10++; if (await>0.02) read_count20++; if (await>0.03) read_count30++; } # IO写等待赋值 if (action=="W") { if (await>maxwait_write) maxwait_write=await; total_write++; write_count_block[update_block]++; if (await>0.001) write_count1++; if (await>0.01) write_count10++; if (await>0.02) write_count20++; if (await>0.03) write_count30++; } } } END { printf("======== Result: ======== "); printf("total number of reads: %d ", total_read); printf("total number of writes: %d ", total_write); printf("slowest read : %.6f second ", maxwait_read); printf("slowest write: %.6f second ", maxwait_write); printf("reads > 1ms: %d >10ms: %d >20ms: %d >30ms: %d ", read_count1, read_count10, read_count20, read_count30); printf("writes > 1ms: %d >10ms: %d >20ms: %d >30ms: %d ", write_count1, write_count10, write_count20, write_count30); printf(" block size:%16s ","Read Count"); for (i in read_count_block) printf("%10d:%16d ", i, read_count_block[i]); printf(" block size:%16s ","Write Count"); for (i in write_count_block) printf("%10d:%16d ", i, write_count_block[i]); }'
1.1 执行结果
- IO空闲状态如下:
# ./count_io.sh /dev/sda ======== Result: ======== total number of reads: 0 total number of writes: 0 slowest read : 0.000000 second slowest write: 0.000000 second reads > 1ms: 0 >10ms: 0 >20ms: 0 >30ms: 0 writes > 1ms: 0 >10ms: 0 >20ms: 0 >30ms: 0 block size: Read Count block size: Write Count
- IO繁忙时看数值变化即可