ARMS 探針在應用運行時為應用提供持續剖析能力。與其他類似採集工具一樣,持續剖析功能會帶來一定的應用效能開銷,但ARMS團隊已經採用多項技術對其進行最佳化,將相關效能開銷降低到極低的範圍,以確保應用的穩定運行。在本篇測試報告中,我們類比了真實的使用情境,測試ARMS持續剖析在不同業務流量下帶來的效能開銷,您可以參考本篇分析報告,在使用ARMS持續剖析前,基於效能影響進行充分的評估。
測試情境
整體架構如下圖所示:
Java應用基於Spring MVC架構編寫,根據壓測源發起的不同請求,會分別訪問MySQL和Redis服務。對於請求${mall-gateway}/case/api/v1/mysql/execute
,Java應用會訪問MySQL(每接到一次請求,會訪問1~4次MySQL);對於請求${mall-gateway}/case/api/v1/redis/execute
,Java應用會訪問Redis(每接到一次請求,會訪問1~10次Redis)。兩種請求各佔50%的QPS。
測試流程
安裝ARMS探針後,在採樣原則設定為10%固定採樣率的情況下,分別使用基於500/1000/2000 QPS,發起3次壓測,每次的持續時間長度為1小時,每次壓測前都先基於50 QPS壓測流量對Java應用進行5分鐘預熱,然後運行30分鐘,待各項資料穩定以後,動態開啟持續剖析所有功能(CPU熱點、記憶體熱點和代碼熱點功能)繼續運行30分鐘,觀察開啟持續剖析前後應用的各項效能指標(CPU開銷、記憶體開銷、RT)上的差異情況。
安裝ARMS探針後,在採樣原則設定為100%固定採樣率的情況下,重複第1步的壓測,對比Java應用在CPU開銷、記憶體開銷、RT上的差異。
未開啟持續剖析效能指標
對比項 | 10%採樣率 | 100%採樣率 |
CPU | 記憶體 | RT | CPU | 記憶體 | RT |
對比項 | 10%採樣率 | 100%採樣率 |
CPU | 記憶體 | RT | CPU | 記憶體 | RT |
500 QPS | 8.112% | 13.52% | 55.5 ms | 8.416% | 13.62% | 56.5ms |
1000 QPS | 15.247% | 14.14% | 62.9 ms | 15.614% | 14.42% | 65.3 ms |
2000 QPS | 30.550% | 14.64% | 70.6 ms | 30.945% | 14.67% | 71.1 ms |
開啟持續剖析效能指標
對比項 | 10%採樣率 | 100%採樣率 |
CPU | 記憶體 | RT | CPU | 記憶體 | RT |
對比項 | 10%採樣率 | 100%採樣率 |
CPU | 記憶體 | RT | CPU | 記憶體 | RT |
500 QPS | 8.912% | 15.52% | 55.6 ms | 9.316% | 15.71% | 56.6 ms |
1000 QPS | 17.140% | 16.24% | 63.0 ms | 17.710% | 16.82% | 65.4 ms |
2000 QPS | 34.650% | 16.84% | 70.7 ms | 35.245% | 16.89% | 71.3 ms |
持續剖析效能開銷
對比項 | 10%採樣率 | 100%採樣率 |
CPU | 記憶體 | RT | CPU | 記憶體 | RT |
對比項 | 10%採樣率 | 100%採樣率 |
CPU | 記憶體 | RT | CPU | 記憶體 | RT |
500 QPS | +0.80% | +2.00% | +0.1 ms | +0.90% | +2.09% | +0.1 ms |
1000 QPS | +1.893% | +2.10% | +0.1 ms | +2.096% | +2.40% | +0.1 ms |
2000 QPS | +4.10% | +2.20% | +0.1 ms | +4.30% | +2.22% | +0.2 ms |
分析結論
持續剖析所有子功能全部開啟的情況下,CPU和記憶體等開銷都在5%以內。如果僅開啟部分功能,例如代碼熱點,開銷會更低。
持續剖析對應用延時影響較小,在一般壓力情境下,開啟持續剖析前後無明顯變化。