Linux伺服器I/O效能分析-3
阿新 • • 發佈:2020-07-29
一、通過指令碼分析IO的讀/寫數量、最大延遲、延遲的分佈情況、塊大小及數量
#!/bin/sh # # File Name : count_io.sh # Time : 2020-07-29-11:24:28 # Author : Lucky if [ $UID != "0" ];then echo "Please use the root." exit 1 fi if [ $# -ne 1 ];then echo "Usage: $0 <block_device_name>" exit 1 fi DEVICE_NAME=$1 #blkparse -i $DEVICE_NAME | sort -g -k8 -k10 -k4 | awk ' cat /tmp/test1.txt | 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("========\nResult:\n========\n"); printf("total number of reads: %d\n", total_read); printf("total number of writes: %d\n", total_write); printf("slowest read : %.6f second\n", maxwait_read); printf("slowest write: %.6f second\n", maxwait_write); printf("reads\n> 1ms: %d\n>10ms: %d\n>20ms: %d\n>30ms: %d\n", read_count1, read_count10, read_count20, read_count30); printf("writes\n> 1ms: %d\n>10ms: %d\n>20ms: %d\n>30ms: %d\n", write_count1, write_count10, write_count20, write_count30); printf("\nblock size:%16s\n","Read Count"); for (i in read_count_block) printf("%10d:%16d\n", i, read_count_block[i]); printf("\nblock size:%16s\n","Write Count"); for (i in write_count_block) printf("%10d:%16d\n", i, write_count_block[i]); }'