Java性能測試從入門到放棄-概念篇
輔助工具
- Jmeter: Apache JMeter是Apache組織開發的基於Java的壓力測試工具。用於對軟件做壓力測試。JMeter 可以用於對服務器、網絡或對象模擬巨大的負載,來自不同壓力類別下測試它們的強度和分析整體性能。另外,JMeter能夠對應用程序做功能/回歸測試

-
簡書有個不錯的作者寫了一個Jmeter的系列:倔強的瀟灑小姐
-
火焰圖:火焰圖是用來展示CPU調用堆棧的SVG圖片。
-
y 軸表示調用棧,每一層都是一個函數。調用棧越深,火焰就 越高,頂部就是正在執行的函數,下方都是它的父函數。
-
x 軸表示抽樣數,如果一個函數在 x 軸占據的寬度越寬,就表示它被抽到的次數多,即執行的時間長。注意,x 軸不代表時間,而是所有的調用棧合並后,按字母順序排列的。
-
火焰圖就是看頂層的哪個函數占據的寬度最大。只要有"平頂"(plateaus),就表示該函數可能存在性能問題。
-
顏色沒有特殊含義,因為火焰圖表示的是 CPU 的繁忙程度,所以一般選擇暖色調。

- 鏈路追蹤:鏈路跟蹤其實就是將一次分布式請求還原成調用鏈路。顯式的在后端查看一次分布式請求的調用情況,比如各個節點上的耗時、請求具體打到了哪台機器上、每個服務節點的請求狀態、每次數據庫操作等等。在進行性能的時候,可以通過鏈路跟蹤平台記錄的接口耗時情況分析性能瓶頸,進行針對性的優化。目前主要使用的是 opentracing 協議,主流的實現有 zipkin 和 jaeger。
概念
- 性能測試:通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試。
- 壓力測試:通過確定一個系統的瓶頸或者不能接受的性能點,來獲得系統能提供的最大服務級別的測試
- 負載測試:不限制軟件的運行資源,測試軟件的數據吞吐量上限,以發現設計上的錯誤或驗證系統的負載能力。評測和評估測試對象在不同工作量條件下的性能行為,以及持續正常運行的能力。
- 穩定性測試:被測試系統在特定硬件、軟件、網絡環境條件下,給系統加載一定業務壓力,使系統運行一段較長時間,以此檢測系統是否穩定,一般穩定性測試
指標
- CPU: CPU 利用率要低於業界警戒值范圍之內,即小於或者等於75%。
- 內存:內存使用率並不能實際反映系統運行情況。主要要關注內存交換區占比,一般認為70%為臨界值,在壓力,負載測試下要保證內存可用
- 磁盤:磁盤指標主要有每秒讀寫多少兆,磁盤繁忙率,磁盤隊列數,平均服務時間,平均等待時間,空間利用率。其中磁盤繁忙率是直接反映磁盤是否有瓶頸的的重要依據,一般情況下,磁盤繁忙率要低於70%
- 響應時間:不同業務的可接受響應時間不同,互聯網企業普通接口應低於500ms。
- 穩定性:一般在n*12的時間范圍內,系統應保持穩定
- CPU,內存指標可通過HTOP,jconsole指令查看