Java EHCache 3监听器和元空间问题

时间:2017-11-03 11:27:23

标签: java memory-leaks jboss ehcache ehcache-3

我们在JBoss EAP 7中遇到了元空间泄漏问题,每次热部署后都会出现这种泄漏问题。

经过一番搜索,我发现了这个: https://blog.voina.org/docker-jboss-dies-with-java-lang-outofmemoryerror-metaspace-after-several-redeploys/

它实际上可能与EHCache有关,它保存了一些类引用,这阻止了JBoss类加载器从元空间中删除旧类。

在本文中,建议使用EHCache库中包含的侦听器:

net.sf.ehcache.constructs.web.ShutdownListener

不幸的是我们正在使用EHCache 3.2.0并且该版本中没有这样的监听器,该监听器有什么替代方案吗?或者任何完全相同的方法,我可以调用" contextDestroyed"方法

1 个答案:

答案 0 :(得分:2)

不再需要这样的倾听者了。但是,在取消部署时关闭CacheManager被认为是一种良好的举止。如果你是在ServletContextListener中创建它,那么它就是一个好地方。

我不会在Ehcache上下载类加载器内存泄漏,但这并非不可能。

诊断它的正确方法是取消部署然后进行堆转储并查看(在像VisualVM这样的工具中)来自仍然存在的战争的包,然后找到它的类加载器,最后找到类加载器的GC根目录。您的泄漏将链接到GC根目录。