我有一个J2EE应用程序,它表现出一些有趣的行为...堆似乎表现良好,在随着时间的推移进行垃圾回收时增长和缩小。没有明显的长期堆扩展 。然而,元空间只是稳定地每小时增长约20Mb,直到我们达到MaxMetaspace并遇到OOME。我尝试了并行和G1垃圾收集器(jdk1.8.0_40)。
该应用程序在执行过程中未被重新部署,因此似乎不像是典型的类加载器泄漏。 有人有建议如何追踪此泄漏源吗?
我有一个J2EE应用程序,它表现出一些有趣的行为...堆似乎表现良好,在随着时间的推移进行垃圾回收时增长和缩小。没有明显的长期堆扩展 。然而,元空间只是稳定地每小时增长约20Mb,直到我们达到MaxMetaspace并遇到OOME。我尝试了并行和G1垃圾收集器(jdk1.8.0_40)。
该应用程序在执行过程中未被重新部署,因此似乎不像是典型的类加载器泄漏。 有人有建议如何追踪此泄漏源吗?
java.lang.OutOfMemoryError: Metaspace的主要原因是:
如果想要重现这个问题,请使用以下代码片段:
public class Metaspace {
static javassist.ClassPool cp = javassist.ClassPool.getDefault();
public static void main(String[] args) throws Exception {
for (int i = 0; ; i++) {
Class c = cp.makeClass("eu.plumbr.demo.Generated" + i).toClass();
}
}
}