Java增强探针性能对用户性能是否会产生影响?
应用性能管理(APM)探针利用字节码增强技术动态采集性能数据,包括方法调用、异常信息、分布式追踪等,帮助开发和运维团队实时监控和优化系统性能。探针集成不可避免地引入了一定量的性能损耗,通过评估探针对Java应用的性能开销(如CPU、内存、延迟),高负载场景下的稳定性和数据采集完整性,可以确保探针在生产环境中运行可靠,性能影响可控,为优化和部署提供重要依据。
测试环境
工具/服务 |
版本/规格 |
说明 |
---|---|---|
JVisualVM |
1.8.0_216 |
JVisualVM是Java自带性能监控工具,监视和管理控制台JConsole,它可以提供 Java 某个进程的内存、线程、类加载、jvm 概述以及的实时信息。 |
JMeter |
5.3 |
Apache JMeter是Apache组织开发的基于Java的压力测试工具,在本次测试中主要是用于模拟多用户并发调用APM查询图表接口。 |
JavaAgent |
2.4.11-profiler |
Java Agent稳定版本 |
ECS服务器 Demo应用 |
2u4g benchmark.jar |
通用计算增强型 | 2vCPUs | 4GiB | c7.large.2,节点的操作系统版本为CentOS 7.9。 根据压测源发起请求,会同时访问MySQL和Redis服务,并返回查询值,使用Spring Cloud、Dubbo实现。 |
约束限制
- Profiler探针版本需要2.4.5版本及以上,请参见JavaAgent更新说明。
- 采样策略设置探针版本需要2.4.11版本及以上,请参见JavaAgent更新说明。
测试流程
- 在不安装探针的情况下,分别使用1TPS、500TPS、1000TPS、2000TPS压测样本,每次的持续时长为30分钟,压测结果将作为基线性能指标。
- 安装探针,采样策略设置为智能采样和100%采样两种情况下,重复步骤1的压测过程,对比CPU、内存、RT上的差异。
- 安装带Profiler探针,性能剖析设置为关闭状态,采样策略设置为智能采样和100%采样两种情况下,重复步骤1的压测过程,对比CPU、内存、RT上的差异。
未安装探针性能极限指标
序号 |
压测样本 |
RT(ms) |
cpu(%) |
内存(MB) |
---|---|---|---|---|
1 |
1TPS |
77.05 |
0.4 |
200 |
2 |
500TPS |
77.42 |
11 |
250 |
3 |
1000TPS |
79.17 |
23 |
300 |
4 |
2000TPS |
83.19 |
45 |
350 |
安装探针性能极限指标
序号 |
压测样本 |
RT(ms) |
CPU(%) |
内存(MB) |
---|---|---|---|---|
1 |
1TPS |
78.36 |
0.4 |
250 |
2 |
500TPS |
79.05 |
18 |
300 |
3 |
1000TPS |
81.84 |
31 |
350 |
4 |
2000TPS |
86.81 |
55 |
400 |
序号 |
压测样本 |
RT(ms) |
CPU(%) |
内存(MB) |
---|---|---|---|---|
1 |
1TPS |
78.38 |
0.4 |
250 |
2 |
500TPS |
80.39 |
20 |
300 |
3 |
1000TPS |
84.51 |
33 |
450 |
4 |
2000TPS |
88.72 |
65 |
500 |
探针性能开销对比
序号 |
压测样板 |
智能采样对比 |
100%采样率对比 |
||||
---|---|---|---|---|---|---|---|
- |
RT |
CPU |
内存 |
RT |
CPU |
内存 |
|
1 |
1TPS |
+1.31ms |
+0% |
+50MB |
+1.33ms |
+0% |
+50MB |
2 |
500TPS |
+1.63ms |
+7% |
+50MB |
+2.97ms |
+9% |
+50MB |
3 |
1000TPS |
+2.67ms |
+8% |
+50MB |
+5.34ms |
+10% |
+150MB |
4 |
2000TPS |
+3.62ms |
+10% |
+50MB |
+5.53ms |
+20% |
+150MB |
报告结论
- JAVA增强型探针对于RT(请求响应时间)影响非常小。
- JAVA增强型探针默认智能采样会额外造成的CPU和内存开销,都在10%以内,实际还会随客户应用复杂性有所增加。
- JAVA增强型探针在100%采样率的情况下,性能开销比智能采样略有上升,在高负载情况下不建议开启100%采样。