最近承接了專案中一些效能測試的任務,因此決定記錄一下,將測試的過程和一些心得收錄下來。
說起來效能測試算是軟體測試行業內,有些特殊的部分。這部分的測試活動,與傳統的測試任務差別是比較大的,也比較依賴工具,一定程度上效能測試被認為是測試中的「高階」部分,跟自動化測試、安全測試等並稱。
本次平台穩定性測試的目的在於:在伺服器壓力處於較飽和(達到80%系統最大tps)壓力之下,在較長時間(>8小時)之內觀測伺服器穩定性問題,以及資源使用情況和異常。
本次測試不呼叫上下游介面,只壓測建立訂單介面。訂單表存量資料19萬,介面請求方式為put。
由於在前序的測試過程中,可以確定本機jmeter執行可以驅動200執行緒數,達到接近系統極限吞吐量的情況。
因此本次穩定性測試決定延續使用本地pc使用jmeter仍以200執行緒進行測試,測試重點在於較長時間段內的穩定情況。
涉及到伺服器資源的監控,將決定使用jmeter外掛程式perfmon配合serveragent進行採集,以nmon作為實時監控工具。
具體工具選擇如下:
核心工具
版本備註
jmeter
3.3提供併發請求能力
perfmon metrics collector
2.1jmeter外掛程式,用於收集伺服器資源使用資訊
serveragent
2.2.1
以伺服形式傳送伺服器資源使用資訊
nmon
16h v2
實時收集伺服器資源資訊
3.2.1 jmeter
3.2.2 serveragent
安裝配置:將工具包解壓至伺服器,賦予755許可權,直接使用./startagent.sh啟動服務。
啟動成功後應該看到如下資訊:
預設繫結埠為4444.
3.2.3 perfmon
perfmon是jmeter外掛程式,配合serveragent進行伺服器資源監聽。
將jar包放至jmeter 安裝目錄下的 lib/ext 子目錄下,重啟jmeter即可生效。
同樣將perfmon jar包放至相同路徑即可啟用perfmon外掛程式。
也可以通過gui介面中的plugin manager 搜尋安裝,如下圖所示:
3.2.5 perfmon外掛程式配置
在jmeter測試計畫中新增perfmon***:
在配置介面中,新增所需要的監控項,如本例中監聽了cpu/memory/磁碟io三項:
注意箭頭標出的按鈕,為監聽具體度量的選擇,本例中選擇的分別是:
提取碼:uto0
總樣本數
平均中位
高位最小
最大錯誤率
吞吐量接收資料量(kb/s)
傳送資料量(kb/s)
68711231
299268
79123
12520
0.00%
667.52975
354.63
809.64
總體樣本數達到68676639個,平均響應時間299,吞吐量667.5/s,錯誤率0,總體比較穩定。
記憶體:
可以看到:
tps穩定在700-800之間,偶有波動,與實驗室網路環境有關。cpu在tps峰值時處於高占用狀態,基本維持在70%左右。記憶體占用穩定在20%。
經過本輪初步測試,在系統tps保持在700以上的條件下,系統表現穩定,事務成功率達100%。測試過程中,cpu保持高位占用,其它系統資源未見明顯瓶頸。
在測試的過程中發現了部分明顯的問題,在此進行記錄:
問題1:
壓測過程中曾遇系統記憶體被大量快取並無法自動釋放的情況。
解決:建立定時任務,定時清理記憶體快取。
問題2:
壓測過程中曾遇系統磁碟被佔100%情況,導致tps降至200左右,經查是由於應用日誌寫入導致。
解決:建立定時任務,定時清理應用日誌。
問題3:
測試中曾遇jmeter報錯address already in use,經查是由於jmeter5本機環境過度占用系統埠導致,嘗試增加開放埠數但是並未解決。改用jmeter3.3以後解決!(這塊仍不確定問題所在,有知道的朋友歡迎交流!)
AspectJ基於xml和基於註解
一 基於xml 執行的切入點中具體方法有返回值,則方法結束會立即執行後置通知,然後再執行環繞通知的放行之後的 2 連線點即所有可能的方法,切入點是正真被切的方法,連線點方法名 其中,只有環繞通知的切入點引數不一樣,是可以放行的切入點 3 異常通知是處理異常 切面類中的異常通知的方法引數列表中異常引數...
拓撲排序(基於dfs 基於佇列)
dfs函式的返回值表示是否成環,若存在有向環,則不存在拓撲排序。不包含有向環的有向圖稱為有向無環圖 dag 可以借助dfs完成拓撲排序,在訪問完乙個結點時把他加入當前拓撲序的首部。舉個栗子 比如乙個 1,2 1,3 2,3 的有向無環圖,就先搜尋1,再遞迴搜尋2,再搜尋3,3沒有出度了,於是放進拓撲...
基於insert update delete的注入
inset注入原理 所謂inset注入就是指我們前端註冊的資訊會被後台通過insert操作插入到資料庫裡邊去,若此時後台沒有做出相應的處理就會構成insert注入。insert注入方法 insert用法例如 insert into member username,pw,phonenum,email,...