Ehcache持久化到磁盘失败?

发布于 2021-12-06 19:36:06 字数 2232 浏览 786 评论 6

项目使用JFinal框架,使用了Ehcache对一些常用的Service方法做缓存,也使用了findByCache()将一些不常改变的sql语句用作缓存

但是今天检查日志时发现了一些错误日志,如下:

2017-11-16 10:24:47.355 [com%002eapp%002evocalist%002eservice%002e%0053ong%0053ervice%002eget%0053ong%0042y%0054ime.data] ERROR net.sf.ehcache.store.disk.DiskStorageFactory - Disk Write of com.app.vocalist.service.SongService.getSongByTime?pageNum=1&pageSize=8 failed: 
java.lang.OutOfMemoryError: Java heap space
2017-11-16 10:24:47.402 [com%002eapp%002evocalist%002eservice%002e%0057ork%0053ervice%002eget%0052ecommend%0041udio.data] ERROR net.sf.ehcache.store.disk.DiskStorageFactory - Disk Write of com.app.vocalist.service.WorkService.getRecommendAudio?pageNum=1&pageSize=4 failed: 
java.lang.OutOfMemoryError: Java heap space
2017-11-16 10:24:47.402 [com%002eapp%002evocalist%002eservice%002e%0057ork%0053ervice%002eget%0052ecommend%0056ideo.data] ERROR net.sf.ehcache.store.disk.DiskStorageFactory - Disk Write of com.app.vocalist.service.WorkService.getRecommendVideo?pageNum=1&pageSize=4 failed: 
java.lang.OutOfMemoryError: Java heap space
2017-11-16 10:24:47.387 [com%002eapp%002evocalist%002eservice%002e%0042anner%0053ervice%002eget%0052ecommend%0042anner.data] ERROR net.sf.ehcache.store.disk.DiskStorageFactory - Disk Write of com.app.vocalist.service.BannerService.getRecommendBanner?bannerNum=4 failed: 
java.lang.OutOfMemoryError: Java heap space

我的ehcache.xml默认cache配置如下:

<!--默认cache的时间为3分钟-->
<defaultCache
        maxEntriesLocalHeap="10000"
        maxEntriesLocalDisk="1000"
        overflowToDisk="true"
        diskSpoolBufferSizeMB="20"
        timeToIdleSeconds="0"
        timeToLiveSeconds="180"
        memoryStoreEvictionPolicy="LFU"
>
</defaultCache>

根据日志错误信息,我查看了Java堆内存是否足够,发现剩余Java堆空间仍有100~250MB可用,目前有几个疑惑,望高手解答!

1.我配置的defaultCache的overflowToDisk=true,这个属性不是只有当内存中数据超过内存限制时才会将缓存写入到磁盘吗?但是我在同一个cachename写的缓存条数应该是达不到最大值的,为什么还会将缓存写入磁盘?

2.错误提示Java Heap space OOM,但是Java堆还是有剩余空间的,如果Java堆内存不足,应该会直接宕机,还是上述错误中的OOM与真正会导致宕机的OOM标准不一致?

上述提供了一些基本的信息,如果还需要其他信息,我再贴出,望高手解答,谢谢!

 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

狠疯拽 2021-12-09 22:34:11

引用来自“JFinal”的评论

此外,还要注意是不是有内存泄漏的代码存在,用 jvisualvm 检查一下

私藏温柔 2021-12-09 19:59:47

引用来自“huojianguo”的评论

应该是没有启动内存缓存监听器吧,

<listener> 
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> 
</listener>

2021-12-09 16:54:43

应该是没有启动内存缓存监听器吧,

<listener> 
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> 
</listener>

瀞厅☆埖开 2021-12-09 13:43:33

按照上面站长的建议再次查了下Java内存,发现Java Heap容量足够,但是Java Metaspace容量已经满了,当时看JVM书的时候Java内存中没有Metaspace这一部分,看名字应该是"元数据",现在百度找下问题原因

谁的新欢旧爱 2021-12-08 22:41:37

此外,还要注意是不是有内存泄漏的代码存在,用 jvisualvm 检查一下

冷清清 2021-12-08 20:59:04

发生了 OutOfMemoryError,不要放太大的数据到内存

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文