Micrometer JMX注册表性能考量及非Count属性移除技术咨询
关于Micrometer JMX注册表的速率指标性能与过滤问题
1. 速率属性的性能考量
Micrometer中Counter的FifteenMinuteRate、FiveMinuteRate、OneMinuteRate基于**EWMA(指数加权移动平均)**算法计算,MeanRate则是总计数除以运行时长:
- 这些计算本身是轻量级的数值运算,常规业务场景下性能开销可以忽略。
- 速率指标并非实时预计算,只有当JMX客户端主动查询这些属性时才会触发计算。如果没有外部系统频繁拉取这些速率值,基本不会产生额外资源消耗;但高频率的查询可能会带来微小的累计开销。
2. 仅保留Count属性的实现方式
要移除所有速率属性只保留Count,可以通过Micrometer的MeterFilter过滤掉不需要的统计量,确保无额外性能开销:
修改后的代码示例
JmxMeterRegistry meterRegistry = new JmxMeterRegistry(MyJmxConfig.DEFAULT, Clock.SYSTEM); // 添加过滤器,拒绝Counter的所有速率统计量,仅保留count meterRegistry.config().meterFilter(MeterFilter.denyStatistic( Meter.Type.COUNTER, "oneMinuteRate", "fiveMinuteRate", "fifteenMinuteRate", "meanRate" )); meterRegistry.counter(name, tags).increment(amount); interface MyJmxConfig extends JmxConfig { MyJmxConfig DEFAULT = k -> null; @Override default String domain() { return "com.example.platform.metrics.test"; } }
说明
MeterFilter.denyStatistic会直接过滤掉指定类型Meter的目标统计量,JMX注册表将不再暴露这些速率属性。- 这种方式不会产生额外性能开销:过滤器仅在Meter注册阶段生效,后续不会触发任何速率计算逻辑,完全避免了相关资源消耗。
内容的提问来源于stack exchange,提问作者Babak
相关产品推荐
相关产品推荐

