Gateway服务监控信息不展示问题分析
概述
排查并解决Gateway服务的内存、cpu、线程、GC等指标不展示问题
现象
gateway突然内存不展示

排查与解决
最开始由于不展示jvm内存最开始写了一段手动注册监控信息的代码,发现仅仅注册了内存信息,所有跟踪JvmGcMetrics 一路翻代码找到了相关处理类。
package com.xxx.tech.gateway.config;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
/**
* 如果自动配置未生效,可以手动注册 JVM 指标
* (由于自动注册失效)
* @author marker
*/
@Configuration
public class JvmMetricsConfig {
private final MeterRegistry meterRegistry;
public JvmMetricsConfig(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}
@PostConstruct
public void bindJvmMetrics() {
new JvmMemoryMetrics().bindTo(meterRegistry);
}
}代码配置后内存展示,但是没有线程、cpu等指标展示。于是debug跟踪bindTo方法在一个正常服务中的调用情况,最终发现了MeterRegistryPostProcessor。
后续继续排查发现这段代码阻断了BeanPostProcessor 处理器的链路,导致后续的MeterRegistryPostProcessor 无法正常处理bean对象,引发了该问题。

SimpleMeterRegistry类会在SimpleMetricsExportAutoConfiguration 自动装配Bean,装配后会进入到MeterRegistryPostProcessor Bean处理器中进行加工处理。

bean的处理底层就是将jvm的内存、cpu、线程等指标信息注册到actuator监控

当注释@Configuration 后,重启,内存信息重新展示。

关注微信公众帐号