本文为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指标的情况,以此来计算探针性能开销。

探针性能开销 =(安装探针后的压测结果 - 基线指标)÷ 基线指标

基线指标

测试人员测试了应用在500、1,000以及2,000 TPS下的性能状况,并将得到的结果作为后续对比实验的基线指标。基线指标结果如下图所示:基线指标

ARMS Java探针压测结果

本压测报告中使用的测试场景如下,每个场景分别使用500、1,000以及2,000 TPS进行压测:
  • 场景一:使用ARMS Java探针默认配置,探针采样率为10%。
  • 场景二:使用ARMS Java探针默认配置,探针采样率为100%。
说明 ARMS Java探针默认配置指的是在ARMS控制台应用设置 > 自定义配置中默认开启的配置项。

场景一压测详情

500 TPS下与基线指标对比:

场景一-500TPS

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

1,000 TPS下与基线指标对比:

场景一-1000TPS

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

2,000 TPS下与基线指标对比:

场景一-2000TPS

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

场景二压测详情

500 TPS下与基线指标对比:

场景二-500TPS

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

1,000 TPS下与基线指标对比:

场景二-1000TPS

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

2,000 TPS下与基线指标对比:

场景二-2000TPS

可以看到在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左右的增长),正常提供大部分服务。