批量 ab 測試

2021-08-21 14:25:34 字數 3366 閱讀 1629

最近在做伺服器壓測,想到可以通過 shell 指令碼呼叫壓測工具 ab 來進行多次測試。大致的想法是:

1. 通過 shell 指令碼迴圈呼叫 ab 壓測工具得到多次壓測日誌,並分類儲存;

2.通過 shell 指令碼迴圈呼叫 awk 工具將每個日誌中的 90% 時間提取出來。

ab是apache自帶的乙個很好用的壓力測試工具,當安裝完apache的時候,就可以在bin下面找到ab。乙個簡單的 demo 如下:

ab -c 10 -n 100 -h "authorization:bearer nauhwws6xea7bcycfvy5vokf7msahdttx7abzn" http://domain/path
其中 -c 代表併發數,-n 代表請求數,-h 要傳送的 header。返回結果示例及各引數意義如下:

this is apachebench, version 2.3 

licensed to the apache software foundation,

benchmarking 101.132.123.35 (be patient).....done

server software: apache/2.4.18 # 伺服器型別及其版本

server hostname: # 請求的主機名

server port: 84 # 埠號

document path: /v1/door/helps # 請求的路徑

document length: 1143 bytes # 返回資料的大小

concurrency level: 10 # 併發規模

time taken for tests: 0.934 seconds # 總請求時間

complete requests: 100 # 完成的請求數

failed requests: 0 # 失敗的請求數

total transferred: 131900 bytes # 總共傳輸的位元組數

html transferred: 114300 bytes # 總 html 位元組數

requests per second: 107.04 [#/sec] (mean) # 吞吐量

time per request: 93.427 [ms] (mean) # 使用者平均等待時間

time per request: 9.343 [ms] (mean, across all concurrent requests) # 伺服器平均處理時間,即吞吐量倒數

transfer rate: 137.87 [kbytes/sec] received # 每秒獲取的資料長度

connection times (ms)

min mean[+/-sd] median max

connect: 7 9 1.2 9 13

processing: 57 83 9.0 83 119

waiting: 57 83 9.0 83 119

total: 67 93 9.4 92 128

percentage of the requests served within a certain time (ms)

50% 92

66% 95

75% 96

80% 99

90% 105 # 90%的請求在105ms內

95% 112

98% 119

99% 128

100% 128 (longest request)

乙個可多次進行壓測的 demo 如下:

do let concurrent['c']+=10; # shell數值運算

dirname=tests/getdb/c$n$;

mkdir -p $dirname;

for j in ;

dooutfile=$/"time"$j;

ab -c $ -n $ -h "$" -e $ $;

done

done

要注意的是 shell 進行數值運算時不能對數字直接操作,需要使用 let 命令或者  和 (())  操作符。然後在 mkdir 的時候,最好帶上 -p 引數,免得報錯。 然後 -h 引數後面帶字串,需要用雙引號包起來。

得到的日誌目錄如下所示

乙個個檢視日誌檔案中 90% 用時會顯得比較麻煩,於是想到可以用 shell 指令碼呼叫 awk 工具, demo 如下:

#!/bin/bash

declare -a concurrent

concurrent=(['c']=0 ['n']=100)

filename="file.txt" # 輸出檔名

for i in ;

do let concurrent['c']+=10;

dirname=tests/get/c$n$ # 取日誌檔案

echo $ >> $filename # 輸出測試條件,一行

for j in ;

do

datafile=$/"time"$j;

awk '/^90/' $ >> $filename # 將 awk 輸出的資訊重定向到 file.txt 中

done

done

awk 的一般使用方法如下:

awk 'regexpattern' srcfile
' ' 內表示正規表示式+命令,如以下命令找出檔案 time0 中以 "9」開頭的行,並且輸出到 file.txt 檔案中。

awk '/^90/' time0 >> file.txt

ab 壓力測試

apache自帶的ab的壓力測試 以前安裝好apache總是不知道該如何測試apache的效能,現在總算找到乙個測試工具了。就是apache自帶的測試工具ab apache benchmark 在apache的bin目錄下。格式 ab options http hostname port path ...

ab壓力測試

1.我的環境是windows下的phpstudy,進入到apache bin目錄裡面有個ab.exe,壓力測試命令如下 ab.exe c 200 n 1000 2.mysql.php 如下 正常的邏輯思維,壓力增大後,導致資料庫num欄位成為負數,將下面 貼上到自己 下測試即可。在test資料庫下,...

ab壓力測試

ab命令會建立多個併發訪問執行緒,模擬多個訪問者同時對某一url位址進行訪問。它的測試目標是基於url的,因此,它既可以用來測試apache的負載壓力,也可以測試nginx lighthttp tomcat iis等其它web伺服器的壓力。ab命令對發出負載的計算機要求很低,它既不會占用很高cpu,...