• Linux服务器I/O性能分析-3


    一、通过脚本分析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繁忙时看数值变化即可

      

  • 相关阅读:
    js1
    curl获取图片
    TP中讲的两种ajax方法
    tp验证码
    TP上传图片
    TP中登录验证
    tp中自定义跳转页面
    用户数据库表状态一类的问题
    用php实现斐波那契数列
    微信的网页授权登陆
  • 原文地址:https://www.cnblogs.com/zhangweiyi/p/13398120.html
Copyright © 2020-2023  润新知