如何关闭Vert.x内部指标以提升应用性能?
关闭Vert.x内部Micrometer指标优化性能
Vert.x默认集成了Micrometer做指标收集,你看到的大量io.micrometer.core.instrument.ImmutableTag实例,就是Vert.x内部组件(比如Web Client)生成指标标签时带来的开销。以下是几种关闭或过滤这些内部指标的方法:
1. 全局禁用所有Vert.x指标
如果完全不需要Vert.x的内部指标,直接关闭整个Micrometer集成:
Vertx vertx = Vertx.vertx(new VertxOptions() .setMicrometerMetricsOptions(new MicrometerMetricsOptions() .setEnabled(false)));
2. 禁用指定组件的指标
要是还想保留部分指标,只关闭产生大量开销的组件(比如HTTP客户端),可以通过disabledMetricsCategories精准控制:
Vertx vertx = Vertx.vertx(new VertxOptions() .setMicrometerMetricsOptions(new MicrometerMetricsOptions() .setEnabled(true) .addDisabledMetricsCategory(MetricsCategory.HTTP_CLIENT)));
常用的禁用类别包括:
HTTP_SERVER:HTTP服务端指标HTTP_CLIENT:HTTP客户端(Web Client)指标TCP_SERVER/TCP_CLIENT:TCP相关指标EVENT_LOOP/WORKER_POOL:线程池相关指标
3. 精细过滤特定指标
需要更细粒度控制的话,自定义MeterFilter过滤掉特定名称或标签的指标:
MeterRegistry registry = new SimpleMeterRegistry(); registry.config().meterFilter(new MeterFilter() { @Override public MeterFilterReply accept(Meter.Id id) { // 拒绝所有Vert.x HTTP客户端相关指标 if (id.getName().startsWith("vertx.http.client")) { return MeterFilterReply.DENY; } return MeterFilterReply.ACCEPT; } }); Vertx vertx = Vertx.vertx(new VertxOptions() .setMicrometerMetricsOptions(new MicrometerMetricsOptions() .setEnabled(true) .setMeterRegistry(registry)));
修改配置后,重新用JFR分析,就能看到ImmutableTag的生成量大幅下降,应用性能也会相应提升。
内容的提问来源于stack exchange,提问作者Alexey Surovenko
相关产品推荐
相关产品推荐

