@ManagedResource(objectName = "com.example.service:name=MyService") publicclassMyService { @ManagedAttribute(description = "Return the amount of free memory in the JVM") publiclonggetMemoryFree() { return Runtime.getRuntime().freeMemory(); }
@ManagedAttribute(description = "Return the total memory for the JVM") publiclonggetMemoryTotal() { return Runtime.getRuntime().totalMemory(); }
@ManagedAttribute(description = "Return the maximum memory for the JVM") publiclonggetMemoryMax() { return Runtime.getRuntime().maxMemory(); }
@ManagedAttribute(description = "Return the number of processors available for the JVM") publicintgetProcessors() { return Runtime.getRuntime().availableProcessors(); } }
这里使用了 Spring JMX 导出自定义 MBean,以获取 JVM 的内存、线程和 CPU 使用情况。需要注意的是,在使用 ManagedAttribute 注解时,需要将 get 方法名称前面的首字母转换为小写,并且需要确保 MBean 的名称和属性名称是唯一的。
使用这些 API 可以实现服务自省是的信息获取和监视。同时,还可以使用其他库,如 Micrometer,来进行指标记录和指标聚合,以监控应用程序的性能和健康状况。