最近在做伺服器壓測,想到可以通過 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,...