guava cache大量的WARN日志的问题分析

  • 时间:
  • 浏览:81
  • 来源:黑白云计算 - 专注共享百万链资讯

google的这个开发工具上面的缓存是个轻量化的缓存,累似 另有4个 HashMap的实现,google在上面加了什么都同步异步的操作。使用起来简单,太满额外搭建redis服务,故项目中使用了这个缓存。

at com.google.common.cache.LocalCache$Segment.refresh(LocalCache.java:2389)

1. 根据报错的堆栈,有些有些往上找,直到找到这个行的事先发现了有些端倪,他想找另有4个 newValue

3. 在通用的getCacheByName的办法中进行判断,取到的对象是有的是NullObject类型的,意味着着是,则返回null给外层,进行重新加载。

2. 定义另有4个 空白的类就叫NullObject

 注意上面的代码,(1)的位置,找只有就返回null,在网上找的代码上面这里通常写的是return null意味着着return doThingsTheHardWay(key)累似 的,否则只有 详细的doThingsTheHardWay描述,什么都我这里写了个null。

什么都根本的问题报告 什么都这里返回null意味着着的错误了。

1. 修改(1)处的代码,将return null修改成return new NullObject()  

 3. 否则就还可不可以 解释问题报告 为哪几种只在生产环境再次经常出现,而开发环境不再次经常出现了,意味着着是触发了过期时间,大伙儿设置的过期时间是60 分钟,什么都开发环境很少调试超过60 分钟的,每次有的是重新运行,什么都根本触发只有这个超时的地方。

4. 否则接着调试,发现会走到大伙儿一刚开始初始化cache的代码那边

有一天生产环境直接假死了,赶紧上服务器排查,发现日志上面有少量的报WARN错误,就说 触发cache的get就会报警告,意味着着cache的触发频率超高,意味着着了日志磁盘爆满,一天好哪几个G的日志上面有的是WARN的错误。否则在开发环境下根本不触发这个错误,为什么会调试都只有 进这段代码上面。先暂时停用了缓存,否则刚开始排查。

找到了问题报告 意味着着,补救方案就相对来说容易的什么都了

2. 继续顺着这条线往上面找,直到找到这段代码,为哪几种要找newValue呢,map可不可以 刷新了,过期了,意味着着主动触发刷新值了。