全部產品
Search
文件中心

Application Real-Time Monitoring Service:4.x版本Java探針效能壓測報告

更新時間:Nov 01, 2024

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。

測試環境

  • 壓測源由阿里雲效能測試服務PTS提供。

  • Java應用、MySQL、Redis都部署在同一個阿里雲Container ServiceACK叢集中,節點執行個體類型為ecs.u1-c1m2.2xlarge,節點的作業系統版本為CentOS Linux release 7.9.2009 (Core) 。

  • Java應用的Pod規格為2核4G,雙副本。

  • ARMS探針採用Aliyun JavaAgent 4.1.11版本。

  • Demo程式碼程式庫

測試流程

  1. 在不安裝ARMS探針的情況下,分別使用基於500 / 1000 / 2000 QPS,發起3次壓測,每次的持續時間長度為1小時,每次壓測前都先基於100 QPS壓測流量對Java應用進行3分鐘預熱,壓測結果將作為基準效能指標。

  2. 安裝ARMS探針,在採樣原則設定為10%固定採樣率的情況下,重複第1步的壓測,對比Java應用在CPU開銷、記憶體開銷、RT上的差異。

  3. 安裝ARMS探針,在採樣原則設定為100%固定採樣率的情況下,重複第1步的壓測,對比Java應用在CPU開銷、記憶體開銷、RT上的差異。

說明

基準效能指標

對比項

CPU

記憶體

RT

500 QPS

5.9%

12.1%

57.4 ms

1000 QPS

11.1%

12.3%

63.2 ms

2000 QPS

20.9%

12.7%

70.3 ms

說明
  • CPU指標代表Pod使用的CPU佔總CPU(2核)的百分比。

  • 記憶體指標代表Pod使用的記憶體佔總記憶體的百分比。由於Pod使用記憶體在達到requests值之前會自然增長,此報告取壓測結束時的記憶體真實佔用。

  • RT指標代表請求的平均回應時間,單位:毫秒。

安裝ARMS探針後的效能指標

對比項

10%採樣率

100%採樣率

CPU

記憶體

RT

CPU

記憶體

RT

500 QPS

7.5%

14.8%

58.1 ms

8.9%

15.2%

58.2 ms

1000 QPS

14.6%

15.3%

64.6 ms

15.5%

15.9%

64.8 ms

2000 QPS

27.3%

16.7%

74.2 ms

27.8%

17.4%

75.8 ms

說明

採樣率對CPU影響與QPS為非線性關係,預設存在每秒Trace採集上限閾值。

探針效能開銷

對比項

10%採樣率

100%採樣率

CPU

記憶體

RT

CPU

記憶體

RT

500 QPS

+1.6%

+2.7%

+0.7 ms

+3.0%

+3.1%

+0.8 ms

1000 QPS

+3.5%

+3.0%

+1.4 ms

+4.4%

+3.6%

+1.6 ms

2000 QPS

+6.4%

+4.0%

+3.9 ms

+6.9%

+4.7%

+5.5 ms

分析結論

  1. ARMS探針額外造成的CPU和記憶體開銷,都在10%以內。

  2. ARMS探針對於RT(請求回應時間)的影響在10%以內,在1000 QPS的情況下增加約1毫秒。

  3. 在100%固定採樣率的情況下,效能開銷比10%固定採樣率略有上升。