1. 引子
最近承接了項目中一些性能測試的任務,因此決定記錄一下,將測試的過程和一些心得收錄下來。
說起來性能測試算是軟件測試行業內,有些特殊的部分。這部分的測試活動,與傳統的測試任務差別是比較大的,也比較依賴工具,一定程度上性能測試被認為是測試中的“高階”部分,跟自動化測試、安全測試等並稱。
2. 任務情況
2.1 任務總覽
本次平台穩定性測試的目的在於:在服務器壓力處於較飽和(達到80%系統最大TPS)壓力之下,在較長時間(>8小時)之內觀測服務器穩定性問題,以及資源使用情況和異常。
2.2 接口情況
本次測試不調用上下游接口,只壓測創建訂單接口。訂單表存量數據19萬,接口請求方式為PUT。
2.3 服務器配置
- 網關服務器 16核CPU、內存16G
- 應用服務器 16核CPU、內存16G
3. 測試過程
3.1 測試機及工具選擇
由於在前序的測試過程中,可以確定本機jmeter運行可以驅動200線程數,達到接近系統極限吞吐量的情況。
因此本次穩定性測試決定延續使用本地PC使用jmeter仍以200線程進行測試,測試重點在於較長時間段內的穩定情況。
涉及到服務器資源的監控,將決定使用Jmeter插件perfmon配合serverAgent進行采集,以nmon作為實時監控工具。
具體工具選擇如下:
核心工具 | 版本 | 備注 |
---|---|---|
Jmeter | 3.3 | 提供並發請求能力 |
PerfMon Metrics Collector | 2.1 | Jmeter插件,用於收集服務器資源使用信息 |
ServerAgent | 2.2.1 | 以伺服形式發送服務器資源使用信息 |
nMon | 16h v2 | 實時收集服務器資源信息 |
3.2 工具安裝配置
3.2.1 Jmeter
- 下載地址: http://jmeter.apache.org/download_jmeter.cgi 現在的最近版本為5.11,需要JDK 8+。建議使用3系列版本,原因后面說明。
- 安裝配置:JDK以及環境配置等網上有大量教程,本文不再復述
3.2.2 ServerAgent
這個東西真是難找,從官網下載下來中斷了很多次,好在最后還是下好了。
ServerAgent需要部署在服務器上,他會以service的形式將服務器資源使用信息進行收集和發送。
- 下載地址: http://jmeter-plugins.org/downloads/all/
- 安裝配置:將工具包解壓至服務器,賦予755權限,直接使用./startAgent.sh啟動服務。
啟動成功后應該看到如下信息:
默認綁定端口為4444.
3.2.3 Perfmon
Perfmon是Jmeter插件,配合ServerAgent進行服務器資源監聽。
- 下載地址: https://jmeter-plugins.org/?search=jpgc-perfmon
- 安裝配置:需要下載Jmeter plugin manager: https://jmeter-plugins.org/install/Install/
將jar包放至JMeter 安裝目錄下的 lib/ext 子目錄下,重啟jmeter即可生效。
同樣將perfMon jar包放至相同路徑即可啟用perfmon插件。
也可以通過GUI界面中的plugin manager 搜索安裝,如下圖所示:
3.2.4 nmon
- 下載地址: http://nmon.sourceforge.net/pmwiki.php?n=Site.Download 找到支持服務器系統的版本下載
或者通過wget 下載: https://nchc.dl.sourceforge.net/project/nmon/nmon16d_x86.tar.gz - 安裝配置: 將壓縮包解壓至自選目錄,賦予755權限,直接運行相應系統的.sh文件即可運行。(如果下載的文件不是.sh格式,可以直接更改后綴名)
本例中運行的就是如下腳本文件:
運行成功后可以看到如下界面:
可以通過鍵入c/m/d/n等調出相關資源監控,如下圖,分別列出了CPU,Memory及磁盤IO:
3.2.5 Perfmon插件配置
在jmeter測試計划中添加perfmon監聽器:
在配置界面中,添加所需要的監控項,如本例中監聽了CPU/Memory/磁盤IO三項:
注意箭頭標出的按鈕,為監聽具體度量的選擇,本例中選擇的分別是:
- CPU:combined : 綜合CPU使用情況
- Memory:usedperc:內存使用比例
- DIsk IO:usedperc:磁盤IO占用比例
保持ServerAgent開啟,那么在線程組運行開始,perfmon插件就將按照配置開始采集服務器資源數據。
以上工具如遇下載困難,可以到以下網盤下載:
鏈接:https://pan.baidu.com/s/1q_gnMNqY8NpYbm8boSj_Jg
提取碼:uto0
4. 測試結果
4.1 聚合報告
總樣本數 | 平均 | 中位 | 高位 | 最小 | 最大 | 錯誤率 | 吞吐量 | 接收數據量(KB/s) | 發送數據量(KB/s) |
---|---|---|---|---|---|---|---|---|---|
68711231 | 299 | 268 | 791 | 23 | 12520 | 0.00% | 667.52975 | 354.63 | 809.64 |
總體樣本數達到68676639個,平均響應時間299,吞吐量667.5/s,錯誤率0,總體比較穩定。
4.2 TPS及資源對比
TPS:
CPU:
內存:
可以看到:
TPS穩定在700-800之間,偶有波動,與實驗室網絡環境有關。CPU在TPS峰值時處於高占用狀態,基本維持在70%左右。內存占用穩定在20%。
4.3 結論
經過本輪初步測試,在系統TPS保持在700以上的條件下,系統表現穩定,事務成功率達100%。測試過程中,CPU保持高位占用,其它系統資源未見明顯瓶頸。
5. 問題
在測試的過程中發現了部分明顯的問題,在此進行記錄:
問題1:
壓測過程中曾遇系統內存被大量緩存並無法自動釋放的情況。
解決:
建立定時任務,定時清理內存緩存。
問題2:
壓測過程中曾遇系統磁盤被占100%情況,導致TPS降至200左右,經查是由於應用日志寫入導致。
解決:
建立定時任務,定時清理應用日志。
問題3:
測試中曾遇jmeter報錯address already in use,經查是由於jmeter5本機環境過度占用系統端口導致,嘗試增加開放端口數但是並未解決。改用jmeter3.3以后解決!(這塊仍不確定問題所在,有知道的朋友歡迎交流!)