一、熔断触发逻辑
探针根据应用的内存利用率和 CPU 利用率来判断是否触发熔断,计算逻辑如下:
·内存利用率 = 已用堆内存 / 最大堆内存
·CPU 利用率 = 统计周期内 JVM 使用的总 CPU 时间 / (统计周期跨度 * CPU 核数)
二、熔断触发行为
当资源利用率超过预设阈值时,探针会限制数据上报,限制行为如下:
·丢弃部分链路数据:随机丢弃50%的链路数据(2.3-20241031及以后的探针版本不再支持)。
·完全关闭数据上报:完全关闭链路数据上报。
三、默认熔断阈值
不同版本的探针默认熔断阈值以及熔断行为,请参考如下表格:
| 判断规则 / 探针版本 | | 丢弃部分链路数据 | | 完全关闭数据上报 | | 调整方式 |
| | | 触发阈值 | 恢复阈值 | 触发阈值 | 恢复阈值 | |
| 内存利用率 | (-∞, 2.3-20241031) | 65% | 60% | 75% | 70% | JVM 启动参数与环境变量 |
| | [2.3-20241031, 2.11-20250704) | – | – | 90% | 85% | JVM 启动参数与环境变量 |
| | [2.11-20250825, 2.11-20260228) | – | – | 90% | | 控制台 |
| | [2.11-20260228, ∞) | – | – | 默认关闭 | | 控制台 |
| CPU 利用率 | (-∞, 2.3-20241031) | 80% | 75% | 90% | 85% | JVM 启动参数与环境变量 |
| | [2.3-20241031, 2.11-20250704) | – | – | | | JVM 启动参数与环境变量 |
| | [2.11-20250825, 2.11-20260228) | – | – | 90% | | 控制台 |
| | [2.11-20260228, ∞) | – | – | 默认关闭 | | 控制台 |
以 CPU 利用率为例,默认熔断保护机制的表现行为如下:
·2.3-20241031 之前的探针版本:当应用的 CPU 利用率达到80%,探针会引入采样机制,随机丢弃50%的链路数据。如果后续 CPU 利用率下降到75%或以下,探针会恢复正常的数据上报。当应用的 CPU 利用率达到90%,探针会完全关闭数据上报。
·2.3-20241031 至 2.11-20250704 之间的探针版本:当应用的 CPU 利用率达到90%,探针会完全关闭数据上报。如果后续 CPU 利用率下降到85%或以下,探针会恢复正常的数据上报。
·2.11-20250825 至 2.11-20260228 之间的探针版本:当应用的 CPU 利用率达到90%,探针会完全关闭数据上报。如果后续 CPU 利用率下降到90%以下,探针会恢复正常的数据上报。
·2.11-20260228 及之后的探针版本:默认关闭。
注意:说明:
注意:从 2.11-20260228 版本开始,探针实现了重大性能优化,能够显著降低业务高峰期的性能开销。从该版本开始,熔断保护不再作为默认开启,建议你尽快 升级探针版本。
四、控制台方式(推荐)
注意:说明:
注意:控制台方式适用于 2.11-20250825 及之后的探针版本。
登录 APM 控制台,前往系统配置 > 应用配置 > 探针配置,可以动态修改熔断保护阈值。
·使用探针默认值:具体的探针默认值请参考 默认熔断阈值。
·自定义:自定义配置将覆盖探针的默认熔断阈值,可以基于内存利用率和 CPU 利用率分别设置熔断阈值。如果需要关闭探针熔断保护机制,请将对应的阈值设置为100。
五、JVM 启动参数与环境变量方式
注意:说明:
注意:JVM 启动参数与环境变量方式适用于 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 |
注意:说明:
注意:自定义流控保持阈值可能会导致监控数据丢失或增加探针性能开销,请尽量保持默认值。