ARMS探針在應用運行態進行位元組碼增強,實現應用效能管理能力。與其他通過位元組碼增強技術實現的效能管理方案一樣,ARMS探針會帶來一定的應用效能開銷,但ARMS團隊已經採用多項技術對探針進行最佳化,將探針的效能開銷降低到極低的範圍,以確保應用的穩定運行。在本篇測試報告中,我們類比了真實的使用情境,測試ARMS探針在不同業務流量下帶來的效能開銷,您可以參考本篇分析報告,在接入ARMS應用監控前,基於效能影響進行充分的評估。
測試情境
整體架構如下圖所示:
Java應用基於Spring MVC架構編寫,根據壓測源發起的不同請求,會分別訪問MySQL和Redis服務。對於請求${mall-gateway}/case/api/v1/mysql/execute
,Java應用會訪問MySQL;對於請求${mall-gateway}/case/api/v1/redis/execute
,Java應用會訪問Redis。兩種請求各佔50%的QPS。
測試流程
在不安裝ARMS探針的情況下,分別使用基於500 / 1000 / 2000 QPS,發起3次壓測,每次的持續時間長度為1小時,每次壓測前都先基於100 QPS壓測流量對Java應用進行3分鐘預熱,壓測結果將作為基準效能指標。
安裝ARMS探針,在採樣原則設定為10%固定採樣率的情況下,重複第1步的壓測,對比Java應用在CPU開銷、記憶體開銷、RT上的差異。
安裝ARMS探針,在採樣原則設定為100%固定採樣率的情況下,重複第1步的壓測,對比Java應用在CPU開銷、記憶體開銷、RT上的差異。
基準效能指標
對比項 | CPU | 記憶體 | RT |
500 QPS | 6.50% | 14.49% | 2ms |
1000 QPS | 17.01% | 14.86% | 2ms |
2000 QPS | 32.36% | 19.04% | 2ms |
安裝ARMS探針後的效能指標
對比項 | 10%採樣率 | 100%採樣率 |
CPU | 記憶體 | RT | CPU | 記憶體 | RT |
對比項 | 10%採樣率 | 100%採樣率 |
CPU | 記憶體 | RT | CPU | 記憶體 | RT |
500 QPS | 7.72% | 18.37% | 2ms | 7.90% | 18.83% | 2ms |
1000 QPS | 19.94% | 18.95% | 2ms | 20.78% | 19.61% | 2ms |
2000 QPS | 40.49% | 25.69% | 3ms | 42.25% | 25.80% | 3ms |
探針效能開銷
對比項 | 10%採樣率 | 100%採樣率 |
CPU | 記憶體 | RT | CPU | 記憶體 | RT |
對比項 | 10%採樣率 | 100%採樣率 |
CPU | 記憶體 | RT | CPU | 記憶體 | RT |
500 QPS | +1.21% | +3.88% | - | +1.39% | +4.35% | - |
1000 QPS | +2.92% | +4.09% | - | +3.76% | +4.75% | - |
2000 QPS | +8.13% | +6.66% | +1ms | +9.89% | +6.76% | +1ms |
分析結論
ARMS探針額外造成的CPU和記憶體開銷,都在10%以內。
ARMS探針對於RT(請求回應時間)的影響非常小,在2000 QPS的情況下僅增加了1毫秒。
在100%固定採樣率的情況下,效能開銷比10%固定採樣率略有上升。