如何获取ehcache 3.1统计信息

时间:2016-11-06 19:57:18

标签: ehcache

使用Ehcache 3.1,我有一个案例可以知道当前存储在ehcache中的元素的大小,以及缓存到目前为止的命中和未命中数。我认为2.6有.getStatistics(),它做类似的事情,但是我在3.1版本中努力找到相同的功能。

感谢您的帮助!!

4 个答案:

答案 0 :(得分:3)

尚未记录,但有一个缓存统计服务可以为您提供与EhCache 2.X相同的统计信息。我刚刚在最后一个版本的EhCache(3.5)中测试过它。

以下是如何在缓存管理器上配置它的示例:

    StatisticsService statisticsService = new DefaultStatisticsService();
    CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
            .using(statisticsService)
            .build();
    cacheManager.init();

然后,在使用此管理器提供的缓存后,您可以向统计服务部门询问统计信息。这是一个小样本:

CacheStatistics ehCacheStat = statisticsService.getCacheStatistics("myCache");
ehCacheStat.getCacheHits();

你可以在ehcache的github上进行单元测试中看到所有这些:https://github.com/ehcache/ehcache3/blob/master/integration-test/src/test/java/org/ehcache/integration/statistics/CacheCalculationTest.java

答案 1 :(得分:2)

目前没有公开的统计API。它在路线图上,但我不能给你更具体的信息。

另一种方法是使用JCache集成,它提供一组公开为MBean的标准统计信息。

答案 2 :(得分:2)

对于Ehcache 3.5.2以及任何其他JCache Provider,您可以使用标准方法在缓存配置期间启用统计信息。

...
MutableConfiguration<Path, String> config = new MutableConfiguration<>();
config.setStatisticsEnabled(true);
...

Cache myCache = cacheManager.createCache(CACHE_NAME, config);

然后,您可以使用以下方法找到MXBean注册静态变量:

public static CacheStatisticsMXBean getCacheStatisticsMXBean(final String cacheName) {
        final MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
        ObjectName name = null;
        try {
            name = new ObjectName("*:type=CacheStatistics,*,Cache=" + cacheName);
        } catch (MalformedObjectNameException ex) {
            LOG.error("Someting wrong with ObjectName {}", ex);
        }
        Set<ObjectName> beans = mbeanServer.queryNames(name, null);
        if (beans.isEmpty()) {
            LOG.debug("Cache Statistics Bean not found");
            return null;
        }
        ObjectName[] objArray = beans.toArray(new ObjectName[beans.size()]);
        return JMX.newMBeanProxy(mbeanServer, objArray[0], CacheStatisticsMXBean.class);
    }

如果找到它,请享受您的统计信息:

CacheStatisticsMXBean CacheStatBean = getCacheStatisticsMXBean(cacheName);
            if (CacheStatBean != null) {
                LOG.debug("Cache hits #{} misses #{}", CacheStatBean.getCacheHits(), CacheStatBean.getCacheMisses());
                LOG.debug("Cache hits %{} misses %{}", CacheStatBean.getCacheHitPercentage(),
                        CacheStatBean.getCacheMissPercentage());
                LOG.debug("Cache gets #{}", CacheStatBean.getCacheGets());
                LOG.debug("Cache evictions #{}", CacheStatBean.getCacheEvictions());
                LOG.debug("Cache average get time {} milliseconds", CacheStatBean.getAverageGetTime());
            }

答案 3 :(得分:0)

修改。这是错误的:

对于其他任何想知道的人来说,它看起来像是公众&#34;统计API将在3.2版中公开:

https://github.com/ehcache/ehcache3/issues/1286

请参阅: https://groups.google.com/forum/#!category-topic/ehcache-users/ehcache-core/N1wqy6Hug38

这仍然是正确的:

我期待着这一点:)