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服务器 | 2u4g | 通用计算增强型 | 2vCPUs | 4GiB | c7.large.2,节点的操作系统版本为CentOS 7.9。 |
Demo应用 | benchmark.jar | 根据压测源发起请求,会同时访问MySQL和Redis服务,并返回查询值,使用Spring Cloud、Dubbo实现。 |
约束限制
- Profiler探针版本需要2.4.5版本及以上,请参见JavaAgent更新说明。
- 采样策略设置探针版本需要2.4.11版本及以上,请参见JavaAgent更新说明。
测试流程
未安装探针性能极限指标
序号 | 压测样本 | 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%采样。

