最近破費買了一台阿裡雲伺服器,準備搭建自己的網站,順便将自己開發的一些測試小工具部署到伺服器上,雖然機器配置一般,還是決定對伺服器進行壓測一番,看一下伺服器性能如何。本次壓測選擇的工具是JMeter,這個工具也是接口測試工具,可以做接口自動化測試。話不多說,開整。
安裝Jmeter
JDK
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
直接安裝dmg檔案即可。
JMeter
安裝很簡單,直接解壓官網下載下傳的.tgz安裝包就行了
https://archive.apache.org/dist/jmeter/binaries/
啟動,有兩種方式
- GUI啟動
進入解壓的Jmeter的bin目錄,執行./jmeter即可啟動
- 非GUI啟動
jmeter -n -t xx.jmx -l log.jtl
⚠️壓測注意事項:Don't use GUI mode for load testing:不要使用GUI模式進行負載測試。
壓測準備
服務介紹
http://121.196.172.xxx/?s=%E4%BD%A0%E5%A5%BD,該服務就是一個HTTP請求,Get請求方法。
伺服器配置
配置項 | 配置值 |
CPU | Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz |
記憶體 | 2G |
硬碟 | 40G |
作業系統 | Red Hat 4.8.5-11 |
壓測任務
簡單壓測查詢服務性能,具體操作開啟100個線程對查詢接口進行壓測15min,觀察性能表現。
壓測腳本開發
- 配置線程組
-
- same user on each iteration:意思是同一個使用者發起請求,勾上并不能代表真正意義上的多線程通路。
- Ramp-up period(in second):例如100個使用者,這裡配置10,則每秒啟動10個使用者
- Loop-count:循環次數,每個線程發送請求的次數。eg:線程數為20,循環次數為5,那麼每個線程發送5次請求,總請求數為20*5=100
- 開發接口測試請求
- 本地調試
執行壓測
我們設定測試場景為100使用者,每隔1秒啟動10個新客戶;整個測試持續15min。現在,我們切換到性能測試腳本目錄下,執行下面的指令啟動測試:
jmeter -n -t xxx.jmx -l log.jtl
生成壓測報告
jmeter -g log.jtl -o <report folder>
壓測結果
伺服器監控
先看下伺服器監控
壓測結果分析
我們需要先對測試結果做個介紹,檢視資料統計圖:
平均響應時間3622ms,吞吐量12.92Tranction/s。
聚合報告參數詳解:
-
- Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這裡顯示的就是 Name 屬性的值
- Samples:請求數——表示這次測試中一共發出了多少個請求,如果模拟10個使用者,每個使用者疊代10次,那麼這裡顯示100
- Average:平均響應時間——預設情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,以Transaction 為機關顯示平均響應時間
- Median:中位數,也就是 50% 使用者的響應時間
- 90% Line:90% 使用者的響應時間
- Min:最小響應時間
- Max:最大響應時間
- Error%:錯誤率—錯誤請求數/請求總數
- Throughput:吞吐量—預設情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數
- KB/Sec:每秒從伺服器端接收到的資料量,相當于LoadRunner中的Throughput/Sec
吞吐量
可以看到查詢服務的TPS在1分鐘内逐漸攀升,最終穩定在13QPS左右。
響應時間
在開始逐漸加壓的1分鐘内響應時間不斷增加,可以結合伺服器監控發現,這主要是因為開始加壓階段CPU占用飙升至90%,記憶體使用也在增加(非主因)導緻。随着線程全部開啟後,資源消耗相對穩定,響應時間開始逐漸降下來,最終在2000ms左右徘徊。
75%的事務處理時間都在4755ms以下,整體平均響應時間處于2800ms以下。