You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Caffeine缓存配置启用JMX监控功能?

配置失效核心原因

你当前的配置仅定义了JCache的通用默认模板,没有绑定实际使用的缓存实例,且仅适配通过JCache API创建的缓存,如果你直接使用原生Caffeine API创建缓存,这套配置本身就不会生效。

分场景解决方案

场景1:使用JCache API管理缓存

  • 首先确认项目已引入Caffeine的JCache适配依赖,Maven坐标参考:
    <dependency>
      <groupId>com.github.benmanes.caffeine</groupId>
      <artifactId>caffeine-jcache</artifactId>
      <version>你的Caffeine版本号</version>
    </dependency>
    
  • 修改application.conf,在caffeine.jcache节点下补充你实际使用的缓存名称,继承默认配置即可:
    caffeine.jcache {
      default {
        monitoring {
          statistics = true
          management = true
        }
      }
      # 替换下面的缓存名称为你实际使用的缓存名,有多个就加多行
      yourCacheName = ${caffeine.jcache.default}
      otherCacheName = ${caffeine.jcache.default}
    }
    
  • 确认你使用Caffeine官方的JCache Provider获取缓存管理器:
    CachingProvider provider = Caching.getCachingProvider("com.github.benmanes.caffeine.jcache.spi.CaffeineCachingProvider");
    CacheManager cacheManager = provider.getCacheManager();
    
    按上述配置创建的缓存会自动注册JMX Bean,不需要额外编码。

场景2:使用原生Caffeine API创建缓存

如果直接通过Caffeine.newBuilder()创建缓存,不需要依赖JCache,手动注册JMX Bean即可:

  1. 构建缓存时开启统计能力:
    Cache<String, Object> cache = Caffeine.newBuilder()
        .recordStats() // 必须开启该配置才会生成运行指标
        .maximumSize(1000)
        .build();
    
  2. 定义JMX暴露接口和实现类:
    // JMX指标接口
    public interface CaffeineCacheStatsMBean {
        long getHitCount();
        long getMissCount();
        double getHitRate();
        long getEvictionCount();
        long getEstimatedSize();
    }
    
    // 指标实现类
    public class CaffeineCacheStatsJmxBean implements CaffeineCacheStatsMBean {
        private final Cache<?, ?> cache;
        public CaffeineCacheStatsJmxBean(Cache<?, ?> cache) {
            this.cache = cache;
        }
        @Override public long getHitCount() { return cache.stats().hitCount(); }
        @Override public long getMissCount() { return cache.stats().missCount(); }
        @Override public double getHitRate() { return cache.stats().hitRate(); }
        @Override public long getEvictionCount() { return cache.stats().evictionCount(); }
        @Override public long getEstimatedSize() { return cache.estimatedSize(); }
    }
    
  3. 缓存初始化完成后注册到JMX服务:
    import java.lang.management.ManagementFactory;
    import javax.management.*;
    
    public void registerCacheToJmx(Cache<?, ?> cache, String cacheName) throws Exception {
        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
        ObjectName objectName = new ObjectName("com.your.business:type=CaffeineCache,name=" + cacheName);
        mBeanServer.registerMBean(new CaffeineCacheStatsJmxBean(cache), objectName);
    }
    

效果验证

应用启动后通过JConsole、VisualVM等工具连接进程,在MBean面板下查找对应名称的Bean,即可查看实时运行指标。

内容的提问来源于stack exchange,提问作者Alain P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:09:02