ARMS 應用監控的 Java 探針通過位元組碼增強實現應用效能管理能力。與其他基於位元組碼增強技術的方案一樣,ARMS 探針會引入一定的效能開銷,ARMS 已採用多項技術最佳化以儘可能減少對應用效能的影響。本報告類比真實使用情境,測試了 ARMS 探針在不同業務流量下的效能開銷,可作為接入 ARMS 應用監控前的效能評估參考。
測試情境
整體架構如下圖所示:
Java 應用基於 Spring MVC 架構編寫,根據壓測源發起的不同請求,分別通過 Druid 架構和 Jedis 架構訪問 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)。
測試環境
壓測源由阿里雲Performance Testing Service 提供。
Java 應用、MySQL、Redis 均部署在同一個阿里雲Container Service ACK 叢集中,節點執行個體類型為
ecs.u1-c1m2.8xlarge,作業系統版本為 Alibaba Cloud Linux 2.1903 LTS 64 位元。Java 應用的 Pod 規格為 2 核 4 G,雙副本,對應的 JVM 參數如下:
-Xms3500m -Xmx3500m -XX:MetaspaceSize=500mARMS 探針採用 Aliyun JavaAgent 5.1.2 版本。
測試流程
在不安裝 ARMS 探針的情況下,分別基於 500/1000/2000 QPS 發起 3 次壓測,每次持續 1 小時。每次壓測前先基於 100 QPS 流量對 Java 應用進行 3 分鐘預熱,壓測結果作為基準效能指標。
安裝 ARMS 探針,將採樣原則設定為 10% 固定採樣率,重複第 1 步的壓測,對比 Java 應用在 CPU 開銷、記憶體開銷、RT 上的差異。
安裝 ARMS 探針,將採樣原則設定為 100% 固定採樣率,重複第 1 步的壓測,對比 Java 應用在 CPU 開銷、記憶體開銷、RT 上的差異。
ARMS 採樣策略的設定方法,參見調用鏈取樣模式選擇(3.2.8以下探針版本)。
ARMS 應用監控的準系統均開啟,包括統計指標、調用鏈、分位元等,並開啟所有外掛程式功能;部分高階功能暫時關閉,如調用鏈壓縮、URL 收斂、脫敏開關、持續剖析等。
基準效能指標
對比項 | CPU | 記憶體 | RT |
500 QPS | 6.752% | 11.48% | 57.8 ms |
1000 QPS | 13.112% | 11.78% | 64.1 ms |
2000 QPS | 26.910% | 12.22% | 70.8 ms |
CPU 指標代表 Pod 使用的 CPU 佔總 CPU(2 核)的百分比。
記憶體指標代表 Pod 使用的記憶體佔總記憶體的百分比。由於 Pod 使用記憶體在達到
requests值之前會自然增長,本報告取壓測結束時的記憶體真實佔用。RT 指標代表請求的平均回應時間,單位:毫秒。
安裝 ARMS 探針後的效能指標
對比項 | 10% 採樣率CPU | 10% 採樣率記憶體 | 10% 採樣率RT | 100% 採樣率CPU | 100% 採樣率記憶體 | 100% 採樣率記憶體 |
500 QPS | 8.492% | 13.66% | 58.6 ms | 9.392% | 13.83% | 59.0 ms |
1000 QPS | 16.932% | 14.07% | 65.2 ms | 18.072% | 14.33% | 65.6 ms |
2000 QPS | 35.120% | 14.61% | 75.1 ms | 35.930% | 14.64% | 76.2 ms |
採樣率對 CPU 影響與 QPS 為非線性關係,預設存在每秒 Trace 採集上限閾值。
探針效能開銷
對比項 | 10% 採樣率CPU | 10% 採樣率記憶體 | 10% 採樣率RT | 100% 採樣率CPU | 100% 採樣率記憶體 | 100% 採樣率記憶體 |
500 QPS | +1.74% | +2.18% | +0.8 ms | +2.64% | +2.35% | +1.2 ms |
1000 QPS | +3.82% | +2.29% | +1.1 ms | +4.96% | +2.55% | +1.5 ms |
2000 QPS | +8.21% | +2.39% | +4.3 ms | +9.02% | +2.42% | +5.4 ms |
分析結論
ARMS 探針額外造成的 CPU 和記憶體開銷均在 10% 以內。
ARMS 探針對請求回應時間(RT)的影響在 10% 以內,在 1000 QPS 的情況下增加約 1 毫秒。
在 100% 固定採樣率的情況下,效能開銷比 10% 固定採樣率略有上升。
整體來看,5.x 版本 Java 探針的效能開銷與 4.x 版本基本一致,測試資料的差異在合理誤差範圍內。