文档中心>腾讯云可观测平台>应用性能监控>参考信息>腾讯云增强版 OpenTelemetry 探针自我保护机制

腾讯云增强版 OpenTelemetry 探针自我保护机制

最近更新时间:2025-08-27 17:46:51

我的收藏
腾讯云增强版 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及之后的版本。
登录 APM 控制台,前往系统配置 > 应用配置 > 探针配置,可以动态修改熔断保护阈值,如果需要禁用基于内存或者 CPU 使用率的熔断保护机制,请将阈值设置为100。


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
说明:
自定义流控保持阈值可能会导致监控数据丢失或增加探针性能开销,请尽量保持默认值。