Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何理解guava cache统计指标?_Java_Guava_Google Guava Cache - Fatal编程技术网

Java 如何理解guava cache统计指标?

Java 如何理解guava cache统计指标?,java,guava,google-guava-cache,Java,Guava,Google Guava Cache,我在我的一个库中使用Guava cache,该库正被我公司的其他服务(由其他团队管理)使用。从我的库中,我记录缓存统计数据每50000次。下面是我在记录时看到的输出 Cache Stats= CacheStats{hitCount=3296628, missCount=1353372, loadSuccessCount=1353138, loadExceptionCount=0, totalLoadTime=2268064327604, evictionCount=1325410} Cache

我在我的一个库中使用Guava cache,该库正被我公司的其他服务(由其他团队管理)使用。从我的库中,我记录
缓存统计数据
50000次。下面是我在记录时看到的输出

Cache Stats= CacheStats{hitCount=3296628, missCount=1353372, loadSuccessCount=1353138, loadExceptionCount=0, totalLoadTime=2268064327604, evictionCount=1325410}
Cache Stats= CacheStats{hitCount=3334167, missCount=1365834, loadSuccessCount=1365597, loadExceptionCount=0, totalLoadTime=2287551024797, evictionCount=1337740}
Cache Stats= CacheStats{hitCount=3371463, missCount=1378536, loadSuccessCount=1378296, loadExceptionCount=0, totalLoadTime=2309012047459, evictionCount=1350990}
Cache Stats= CacheStats{hitCount=3407719, missCount=1392280, loadSuccessCount=1392039, loadExceptionCount=0, totalLoadTime=2331355983194, evictionCount=1364535}
Cache Stats= CacheStats{hitCount=3443848, missCount=1406152, loadSuccessCount=1405908, loadExceptionCount=0, totalLoadTime=2354162371299, evictionCount=1378654}
我的缓存配置如下图所示:

    CacheBuilder
      .newBuilder()
      .maximumSize(1000000)
      .expireAfterWrite(120, TimeUnit.SECONDS)
      .concurrencyLevel(5000)
      .removalListener(
          RemovalListeners.asynchronous(new CustomListener(),
              Executors.newSingleThreadScheduledExecutor())).build();
有人能帮我了解一下我们的命中率是多少,以及如何解释上述缓存指标吗?我不知道这些数字告诉我什么。基于以上结果,如果我们增加
maximumSize
expireAfterWrite
间隔,我们是否可以看到更好的性能


注意:我们仍在使用guava-11.0.2,由于某些原因,我无法升级。

来自文档

缓存统计信息将根据以下规则递增:

  • 当缓存查找遇到现有缓存项时,命中率为 增加

  • 当缓存查找第一次遇到缺少的缓存项时,新的 条目已加载

  • 成功加载条目后,错误计数和加载成功计数
    增加,总加载时间(以纳秒为单位)为 添加到总加载时间

  • 当加载条目时引发异常时,会导致错误计数和 loadExceptionCount递增,总加载时间以 纳秒添加到totalLoadTime

  • 遇到仍在运行的缺少缓存项的缓存查找 加载将等待加载完成(无论是否成功) 不)然后递增错误计数

  • 从缓存中逐出一个条目时,逐出计数为 增加

  • 当缓存项无效或手动时,不会修改任何统计信息 删除

  • 在的asMap视图上调用的操作不会修改任何统计信息 缓存

现在来看看你的指标

查看您的指标。
CacheStats{hitCount=3296628,missCount=1353372,loadSuccessCount=1353138,loadExceptionCount=0,totalLoadTime=2268064327604,executioncount=1325410}
考虑到您的大小为1M,约75%的请求得到缓存命中,并且您的数据大小约为135万,最坏的情况是,您的缓存未命中看起来像是由于过期而发生的。我建议将
maximumSize
增加到大约1.25-1.35M,然后再次运行相同的测试


如果您提到运行测试的时间框架,以便计算出逐出率,这也会有所帮助。如果可能,请将写入后的过期时间增加到一个更大的数字,以减少逐出次数。

来自文档

缓存统计信息将根据以下规则递增:

  • 当缓存查找遇到现有缓存项时,命中率为 增加

  • 当缓存查找第一次遇到缺少的缓存项时,新的 条目已加载

  • 成功加载条目后,错误计数和加载成功计数
    增加,总加载时间(以纳秒为单位)为 添加到总加载时间

  • 当加载条目时引发异常时,会导致错误计数和 loadExceptionCount递增,总加载时间以 纳秒添加到totalLoadTime

  • 遇到仍在运行的缺少缓存项的缓存查找 加载将等待加载完成(无论是否成功) 不)然后递增错误计数

  • 从缓存中逐出一个条目时,逐出计数为 增加

  • 当缓存项无效或手动时,不会修改任何统计信息 删除

  • 在的asMap视图上调用的操作不会修改任何统计信息 缓存

现在来看看你的指标

查看您的指标。
CacheStats{hitCount=3296628,missCount=1353372,loadSuccessCount=1353138,loadExceptionCount=0,totalLoadTime=2268064327604,executioncount=1325410}
考虑到您的大小为1M,约75%的请求得到缓存命中,并且您的数据大小约为135万,最坏的情况是,您的缓存未命中看起来像是由于过期而发生的。我建议将
maximumSize
增加到大约1.25-1.35M,然后再次运行相同的测试


如果您提到运行测试的时间框架,以便计算出逐出率,这也会有所帮助。如果可能,将写入后的过期时间增加到一个更高的数字,以减少驱逐的次数。

您不了解文档中的哪些内容?您可能希望使用
refreshAfterWrite
,以便在过期之前重新加载最热门的条目,以最大限度地减少对消费者的阻塞。您在文档中不了解什么?您可能希望使用
refreshAfterWrite
,以便在过期之前重新加载最热门的条目,以最大限度地减少对使用者的阻塞。感谢您的详细解释。实际上,这不是一个测试,在过去的5-6天里,有一台机器一直在生产中运行这个构建,我们每记录50000个这些指标。你怎么知道数据大小在1.35米左右,只是好奇而已?所以你的意思是说我应该将
最大大小
增加到
1350000
而不是
1000000
?他猜测过期是驱逐的原因,这可能是一个大缓存,而
最大大小/命中率
将是总工作集。这可能不是真的,因为“一次成功的奇迹”污染了LRU的缓存。通常,反复试验(例如使用不同配置的金丝雀机器)是最简单的解决方案。或者,您可以捕获一个模拟跟踪以查看命中率曲线。感谢您的详细解释。实际上,这不是一个测试,在过去的5-6天里,有一台机器一直在生产中运行这个构建,我们每记录50000个这些指标。你怎么知道数据大小在1.35米左右,只是好奇而已?你的意思是说我应该增加