4.x版本Java探针性能压测报告

ARMS探针在应用运行时进行字节码增强,实现应用性能管理能力。与其他通过字节码增强技术实现的性能管理方案一样,ARMS探针会带来一定的应用性能开销,但ARMS团队已经采用多项技术对探针进行优化,将探针的性能开销降低到极低的范围,以确保应用的稳定运行。在本篇测试报告中,我们模拟了真实的使用场景,测试ARMS探针在不同业务流量下带来的性能开销,您可以参考本篇分析报告,在接入ARMS应用监控前,基于性能影响进行充分的评估。

测试场景

整体架构如下图所示:

image

Java应用基于Spring MVC框架编写,根据压测源发起的不同请求,会分别通过Druid框架和Jedis框架访问MySQLRedis服务。对于请求${mall-gateway}/case/api/v1/mysql/execute,Java应用会访问MySQL(每接到一次请求,会访问1~4MySQL);对于请求${mall-gateway}/case/api/v1/redis/execute,Java应用会访问Redis(每接到一次请求,会访问1~10Redis)。

测试环境

  • 压测源由阿里云性能测试服务PTS提供。

  • Java应用、MySQL、Redis都部署在同一个阿里云容器服务ACK集群中,节点实例类型为ecs.u1-c1m2.8xlarge,节点的操作系统版本为Alibaba Cloud Linux 2.1903 LTS 64位。

  • Java应用的Pod规格为24G,双副本,对应的JVM参数如下所示:

    -Xms3500m -Xmx3500m -XX:MetaspaceSize=500m
  • ARMS探针采用Aliyun JavaAgent 4.2.1版本。

  • 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上的差异。

说明
  • 关于ARMS的采样策略设置,请参见调用链采样模式选择(3.2.8及以上探针版本)

  • ARMS 应用监控的基本功能都将开启,包括统计指标、调用链、分位数等,并开启所有插件功能;一些高阶功能将暂时关闭,如调用链压缩,URL收敛,脱敏开关,持续剖析等。

基线性能指标

对比项

CPU

内存

RT

500 QPS

6.737%

11.51%

57.6 ms

1000 QPS

13.040%

11.81%

63.9 ms

2000 QPS

26.796%

12.19%

70.5 ms

说明
  • CPU 指标代表 Pod 使用的 CPU 占总 CPU(2核) 的百分比。

  • 内存指标代表 Pod 使用的内存占总内存的百分比。由于 Pod 使用内存在达到 requests 值之前会自然增长,此报告取压测结束时的内存真实占用。

  • RT指标代表请求的平均响应时间,单位:毫秒。

安装ARMS探针后的性能指标

对比项

10%采样率

100%采样率

CPU

内存

RT

CPU

内存

RT

500 QPS

8.412%

13.72%

58.5 ms

9.316%

13.91%

58.7 ms

1000 QPS

16.947%

14.14%

64.9 ms

18.114%

14.42%

65.3 ms

2000 QPS

34.850%

14.64%

74.6 ms

35.945%

14.67%

76.1 ms

说明

采样率对CPU影响与QPS为非线性关系,默认存在每秒Trace采集上限阈值。

探针性能开销

对比项

10%采样率

100%采样率

CPU

内存

RT

CPU

内存

RT

500 QPS

+1.68%

+2.21%

+0.9 ms

+2.58%

+2.40%

+1.1 ms

1000 QPS

+3.907%

+2.33%

+1.0 ms

+5.07%

+2.61%

+1.4 ms

2000 QPS

+8.05%

+2.45%

+4.1 ms

+9.14%

+2.48%

+5.6 ms

分析结论

  1. ARMS探针额外造成的CPU和内存开销,都在10%以内。

  2. ARMS探针对于RT(请求响应时间)的影响在10%以内,在1000 QPS的情况下增加约1毫秒。

  3. 100%固定采样率的情况下,性能开销比10%固定采样率略有上升。