腾讯云增强版 OpenTelemetry Java 探针实现了熔断和流控两种自我保护机制。在应用负载特别高的时候,探针会对埋点以及数据上报进行降级处理,在极端情况下降低对正常业务流程的影响。当应用负载回到正常水位后,探针会自动恢复埋点和数据上报。
熔断保护机制
熔断触发逻辑
探针根据应用的内存使用率和 CPU 使用率来判断是否触发熔断,计算逻辑如下:
内存使用率 = 已用堆内存 / 最大堆内存
CPU 使用率 = 统计周期内 JVM 使用的总 CPU 时间 / (统计周期跨度 * CPU 核数)
熔断触发行为
当资源使用率超过预设阈值时,探针会限制数据上报,限制行为如下:
丢弃部分链路数据:随机丢弃50%的链路数据(2.3-20241031及以后的探针版本不再支持)。
完全关闭数据上报:完全关闭链路数据上报。
默认熔断阈值
不同版本的探针默认熔断阈值以及熔断行为,请参考如下表格:
判断规则 / 探针版本 | 丢弃部分链路数据 | 完全关闭数据上报 | |||
| | 触发阈值 | 恢复阈值 | 触发阈值 | 恢复阈值 |
内存使用率 | 2.3-20241031之前的探针版本 | 65% | 60% | 75% | 70% |
| 2.3-20241031至2.11-20250704之间的探针版本 | - | - | 90% | 85% |
| 2.11-20250825及之后的探针版本 | - | - | 90% | |
CPU 使用率 | 2.3-20241031之前的探针版本 | 80% | 75% | 90% | 85% |
| 2.3-20241031至2.11-20250704之间的探针版本 | - | - | | |
| 2.11-20250825及之后的探针版本 | - | - | 90% | |
以 CPU 使用率为例,熔断保护机制的表现行为如下:
2.3-20241031之前的探针版本:当应用的 CPU 使用率达到80%,探针会引入采样机制,随机丢弃50%的链路数据。如果后续 CPU 使用率下降到75%或以下,探针会恢复正常的数据上报。当应用的 CPU 使用率达到90%,探针会完全关闭数据上报。
2.3-20241031至2.11-20250704之间的探针版本:当应用的 CPU 使用率达到90%,探针会完全关闭数据上报。如果后续 CPU 使用率下降到85%或以下,探针会恢复正常的数据上报。
2.11-20250825及之后的探针版本:当应用的 CPU 使用率达到90%,探针会完全关闭数据上报。如果后续 CPU 使用率下降到90%以下,探针会恢复正常的数据上报。
说明:
从2.3-20241031版本开始,探针对埋点和数据上报进行了优化,在提升性能的同时,不再提供丢弃部分链路数据的保护机制。
从2.11-20250825版本开始,探针对熔断保护机制进行了简化,取消了恢复阈值,并支持从控制台配置熔断阈值。
新版本探针能够提升数据上报成功率,并降低探针性能开销,建议您尽快 升级探针版本。
自定义熔断阈值
控制台方式(推荐)
说明:
控制台方式适用于腾讯云增强版 OpenTelemetry 探针2.11-20250825及之后的版本。

JVM 启动参数与环境变量方式
说明:
控制台方式适用于腾讯云增强版 OpenTelemetry 探针2.3-20241031及之后的版本。
2.11-20250825及之后的探针版本不再支持恢复阈值。
通过JVM 启动参数或环境变量自定义阈值的相关参数,请参考如下表格:
设置方式 | 判断规则 | 关闭数据上报 - 触发阈值 | 关闭数据上报 - 恢复阈值 |
JVM 启动参数 | 内存使用率 | disable.reporting.on.memory.percentage | recover.reporting.on.memory.percentage |
| CPU 使用率 | disable.reporting.on.cpu.percentage | recover.reporting.on.cpu.percentage |
环境变量 | 内存使用率 | DISABLE_REPORTING_ON_MEMORY_PERCENTAGE | RECOVER_REPORTING_ON_MEMORY_PERCENTAGE |
| CPU 使用率 | DISABLE_REPORTING_ON_CPU_PERCENTAGE | RECOVER_REPORTING_ON_CPU_PERCENTAGE |
以基于内存使用率的触发阈值为例,如果要将其设置为95%,可以在 JVM 启动参数中添加
-Ddisable.reporting.on.memory.percentage=95
,完整的 Java 启动命令如下:java -javaagent:/path/to/opentelemetry-javaagent.jar \\-Dotel.resource.attributes=service.name=myService,token=myToken\\-Dotel.exporter.otlp.endpoint=http://pl-demo.ap-guangzhou.apm.tencentcs.com:4317 \\-Ddisable.reporting.on.memory.percentage
=95-jar SpringCloudApplication.jar
也可以在环境变量中添加如下内容:
export DISABLE_REPORTING_ON_MEMORY_PERCENTAGE=95
如果要禁用基于内存使用率或 CPU 使用率的熔断保护机制,请将触发阈值设置为0或100。例如在 JVM 启动参数中添加
-Ddisable.reporting.on.memory.percentage=100
。流控保护机制
流控保护机制通过动态控制数据采集和上报的速率,确保监控系统自身的资源消耗始终处于可控范围,默认流控保持阈值请参考如下表格:
配置名 | 默认值 | 说明 |
每秒最大 Span 创建数 | 5000 | 每秒超过该配置数量的 Span 将不被创建。 |
发送队列长度 | 10240 | 如果网络原因导致 Span 数据不能及时上报到 APM 服务端,待上报 Span 将在队列中堆积。队列无法容纳的 Span 将会被抛弃。 |
每批次最大 Span 上报数 | 2048 | 该参数决定探针每批次向 APM 服务端上报的 Span 数据的最大数量。 |
通过 JVM 启动参数或环境变量,可以自定义流控保持阈值,具体配置方式请参考如下表格:
设置方式 | 规则 | 配置参数 |
JVM | 每秒最大 Span 创建数 | max.span.per.second |
| 发送队列长度 | otel.bsp.max.queue.size |
| 每批次最大 Span 上报数 | otel.bsp.max.export.batch.size |
环境变量 | 每秒最大 Span 创建数 | MAX_SPAN_PER_SECOND |
| 发送队列长度 | OTEL_BSP_MAX_QUEUE_SIZE |
| 每批次最大 Span 上报数 | OTEL_BSP_MAX_EXPORT_BATCH_SIZE |
说明:
自定义流控保持阈值可能会导致监控数据丢失或增加探针性能开销,请尽量保持默认值。