uncategorized

用WRK做Azure Web Site的HTTP壓力測試

最近,因為網站效能Issue,所以除了針對系統進行調整外,也想試試看系統在Web Site & CDN節點對於HTTP的負荷量,除了透過原本Visual Studio工具外,我們也可以用WRK來進行HTTP的測試。個人覺得這是一個簡單的工具而已,整體的資訊跟介面(基本上也沒介面)都是比較簡單的。要使用WRK前必須到WRK的Github下載,這個工具不能在Windows環境執行必須透過MAC執行,這有一點可惜。直接從Github下載下來,然後直接到WRK目錄,用make去編譯檔案就可以開始用,不過,在編譯前,必須先確認你的環境是否有安裝opensslLua兩個套件,不然會發生找不到openssl的狀況

其Wrk目錄檔案如下:

直接下這樣的指令啟動

1
wrk -t10 -c10 -d20 http://dice.xxxxxxxxx

就可以得到測試結果,這指令的參數分別為:
▪ -t:代表用幾個Thread去測試
▪ -c:模擬多少個Request去連線
▪ -d:表示在多少時間範圍內,這邊顯示d20s,測試時間為20sec
▪ -T:表示認定當回應超過多久表示Timeout,預設是一秒,所以,從上面數據發現有一個Request發生Timeout了

統計出來資訊,會有平均值,標準差,最大值,和正負標準差,另外,還有我們可以知道能承受多少Request,我們在測試另一個網站試試看

測試msdn.microsoft.com/cloud-app-development-msdn

1
wrk -t20 -c100 -d20s -T5 https://msdn.microsoft.com/cloud-app-development-msdn

得到的結果

1
2
3
4
5
6
7
8
9
Running 20s test @ https://msdn.microsoft.com/cloud-app-development-msdn
20 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.95s 1.09s 4.92s 78.36%
Req/Sec 3.12 3.74 20.00 83.73%
605 requests in 20.09s, 29.00MB read
Socket errors: connect 0, read 0, write 0, timeout 55
Requests/sec: 30.11
Transfer/sec: 1.44MB

從上面可以知道我們在20.9sec中發出了605個Request,因為設定為超過5秒就Timeout,所以,共有55個Timeout,每秒處理30.11個Request和傳輸1.44 MB。其中,Latency表示每個Request的Reponse的時間。

下面這數據,表示每個執行緒在一秒內可以完成Http的需求個數

1
Req/Sec 3.12 3.74 20.00 83.73%

如果我們加上--latency,就可以看出回應時間的分佈,就可以了解更詳細一點的資訊

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Running 20s test @ https://msdn.microsoft.com/cloud-app-development-msdn
20 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.84s 1.13s 5.00s 79.78%
Req/Sec 3.07 3.74 20.00 82.64%
Latency Distribution
50% 1.42s
75% 2.39s
90% 3.80s
99% 4.83s
608 requests in 20.10s, 29.02MB read
Socket errors: connect 0, read 0, write 0, timeout 69
Requests/sec: 30.25
Transfer/sec: 1.44MB

這只是一個簡單的測試工具,可以拿來使用看看,如果還想要更精進部分,也可以透過lua腳本去撰寫相對應的程式,可以測試的準確度根細緻化會更高,要執行lua script可以這樣下指令

1
wrk -t12 -c100 -d30s -T30s --script=AA.lua --latency http://XXXXX

個人覺得這是一個簡易型的工具,雖然整體完整性可能不是那樣高,但是基本該有的東西都包含了,所以,要做一些HTTP壓測還是拿來用看看