zoukankan      html  css  js  c++  java
  • shell写一个压测脚本

    ab命令

    ab是apache下面的一个性能压测工具

    yum install -y httpd-tools
    ab -n 1000 -c 10 http://xxxx
    # -n 请求数 -c 并发数
    

    基于ab写一个压测脚本

     #!/bin/bash
     
     requests=(1000 2000 10000)
     concurrency=(10 100)
     path="http://localhost:3000"
     
     benchmark() {
       if [ $3 -eq 0 ];then
         ab -n $1 -c $2 $path 2>&1 | awk 'BEGIN {printf "%-10s %-15s %-8s %-8s %-8s
    ", "Requests", "Concurrency", "Min(ms)", "Max(ms)", "Mean(ms)";printf "------------------------------------------------------ 
    "} /Total:/ {printf "%-10s %-15s %-8s %-8s %-8s
    ", "'$1'", "'$2'", $2, $6, $3}'
       else
         ab -n $1 -c $2 $path 2>&1 | awk '/Total:/ {printf "%-10s %-15s %-8s %-8s %-8s
    ", "'$1'", "'$2'", $2, $6, $3}'
       fi  
     }
     
     index=0
     for request in ${requests[@]}
     do
       for con in ${concurrency[@]} 
       do  
         benchmark $request $con $index 
         let 'index++'
       done
     done 
    

    压测结果:

    Requests   Concurrency     Min(ms)  Max(ms)  Mean(ms)
    ------------------------------------------------------
    1000       10              4        23       7       
    1000       100             9        52       39      
    2000       10              3        63       4       
    2000       100             9        42       31      
    10000      10              2        409      5       
    10000      100             9        1980     49    
    

    几个细节

    1. shell遍历数组 for request in ${requests[@]}
    2. awk中/Total:/必须放在BEGIN{printf ''}后面
    3. 管道符默认只传递标准输出,所以需要2>&1
    4. awk中printf中%-8s,负号表示左对齐,8表示占8位字符,s表示字符串
    5. shell中使用let进行数学计算
  • 相关阅读:
    Fetch的使用
    if判断中的true和false
    分布式、微服务和集群的初步了解
    关于视频的知识点
    ajax请求
    jq的遍历关系元素方法集合
    docker安装Mysql
    设计模式系列之七大原则之——开闭原则
    设计模式系列之七大原则之——里式替换原则
    设计模式系列之七大原则之——依赖倒转原则
  • 原文地址:https://www.cnblogs.com/Peter2014/p/13132235.html
Copyright © 2011-2022 走看看