本文为ARMS Java探针的性能压测报告。在本报告中,测试人员对同一个应用以不同的压测流量进行了多轮压测,以此来验证ARMS Java探针的性能。
背景信息
压测环境基本信息
- ARMS Java探针版本:v2.7.3
- 压测平台:阿里云性能测试PTS
- 测试应用所在ECS实例的硬件配置:2 Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz,4G memory
- 操作系统版本:CentOS Linux release 7.6.1810 (Core)
测试应用基本信息
该测试应用基于Spring,包含Spring Boot、Spring MVC,模拟的Redis客户端和JDBC连接池(用于模拟MySQL客户端)。在监控该应用的过程中,针对每个事务,ARMS Java探针会抓取7个Span,包括1个Tomcat,1个Spring MVC,1个Method,2个Jedis和2个MySQL。
基线指标
- CPU:CPU总体百分比
- MEM:所占用的内存
- TPS:每秒事务数
- RT:响应时间,单位为毫秒
探针性能开销计算方法
在得到基线指标后,为测试应用安装ARMS Java探针,并在安装探针的情况下再次进行压测,然后观察CPU、MEM、TPS和RT指标的情况,以此来计算探针性能开销。
探针性能开销 =(安装探针后的压测结果 - 基线指标)÷ 基线指标
基线指标

ARMS Java探针压测结果
- 场景一:使用ARMS Java探针默认配置,探针采样率为10%。
- 场景二:使用ARMS Java探针默认配置,探针采样率为100%。
场景一压测详情
500 TPS下与基线指标对比:

可以看到在500 TPS的压测条件下,ARMS Java探针的额外CPU开销为1.49%(相对基线指标额外损耗6.94%),额外内存开销为1.2%,RT损耗约为1毫秒。
1,000 TPS下与基线指标对比:

可以看到在1,000 TPS的压测条件下,ARMS Java探针的额外CPU开销为2.12%(相对基线指标额外损耗6.54%),额外内存开销为1.18%,RT损耗约为1毫秒。
2,000 TPS下与基线指标对比:

可以看到在2,000 TPS的压测条件下,ARMS Java探针的额外CPU开销为3.67%(相对基线指标额外损耗6.90%),额外内存开销为1.2%,RT损耗为0毫秒。
场景二压测详情
500 TPS下与基线指标对比:

可以看到在500 TPS的压测条件下,ARMS Java探针的额外CPU开销为1.51%(相对基线指标额外损耗7.03%),额外内存开销为1.25%,RT损耗为0毫秒。
1,000 TPS下与基线指标对比:

可以看到在1,000 TPS的压测条件下,ARMS Java探针的额外CPU开销为2.85%(相对基线指标额外损耗8.79%),额外内存开销为1.54%,RT损耗为1毫秒。
2,000 TPS下与基线指标对比:

可以看到在2,000 TPS的压测条件下,ARMS Java探针的额外CPU开销为4.64%(相对基线指标额外损耗8.72%),额外内存开销为1.15%,RT损耗为0毫秒。
ARMS Java探针性能总结
CPU
对比项 | 500 TPS | 1,000 TPS | 2,000 TPS |
---|---|---|---|
基线 | 21.47% | 32.43% | 53.21% |
场景一 | 22.96% | 34.55% | 56.88% |
场景二 | 22.98% | 35.28% | 57.85% |
Memory(MEM)
对比项 | 500 TPS | 1,000 TPS | 2,000 TPS |
---|---|---|---|
基线 | 53.51% | 53.62% | 54.09% |
场景一 | 54.71% | 54.80% | 55.29% |
场景二 | 54.76% | 55.16% | 55.24% |
RT
对比项 | 500 TPS | 1,000 TPS | 2,000 TPS |
---|---|---|---|
基线 | 107 ms | 109 ms | 129 ms |
场景一 | 108 ms | 110 ms | 129 ms |
场景二 | 107 ms | 110 ms | 129 ms |
在不同TPS下,经过对相同默认配置不同采样率的ARMS Java探针进行性能压测和分析,可以看到ARMS Java探针能够在CPU额外开销5%~10%以内,内存开销100M以内的情况下(其中Metaspace会带来30M左右的增长),正常提供大部分服务。