Java 使tomcat从元空间卸载编译的JSP文件
类似于,但有一些更现代的问题 我有一个遗留应用程序,它有很多JSP。他们中的一些人使用Java 使tomcat从元空间卸载编译的JSP文件,java,jsp,tomcat,memory,memory-leaks,Java,Jsp,Tomcat,Memory,Memory Leaks,类似于,但有一些更现代的问题 我有一个遗留应用程序,它有很多JSP。他们中的一些人使用…来创建空格(因为页面上的CSS清理还没有完成) 最近,在系统运行了一段时间后,出现了内存不足错误。我正在评估堆空间,它似乎在控制之下,强制周期性的GCs显示堆空间小于100MBs,但非堆大小正在增加。我已经将大小限制为300MB,这似乎已经很多了,因为Docker中的系统通常运行在512MB 无论如何,我使用JSPC,当我合计所有生成的类文件占用的字节数时,我得到21981012字节。根据我所看到的其他答案,
…
来创建空格(因为页面上的CSS清理还没有完成)
最近,在系统运行了一段时间后,出现了内存不足错误。我正在评估堆空间,它似乎在控制之下,强制周期性的GCs显示堆空间小于100MBs,但非堆大小正在增加。我已经将大小限制为300MB,这似乎已经很多了,因为Docker中的系统通常运行在512MB
无论如何,我使用JSPC,当我合计所有生成的类文件占用的字节数时,我得到21981012字节。根据我所看到的其他答案,我认为它进入了元空间。当然,当它被解压到内存中时,这个数字可能会增加很大一部分
所以我的问题是,有没有一种方法可以配置Java或Tomcat在metaspace不使用时从metaspace释放类数据,并在需要时重新加载
更新:我在我的CATALINA_OPTS
中明确限制了元空间大小,以便它更快地失败-XX:MaxMetaspaceSize=200m-XX:CompressedClassSpaceSize=100m
这是VisualVM。类似乎没有被卸载,元空间也没有下降。
这是元空间。
默认情况下,JVM处理类的加载和卸载。您的应用程序命令行是什么?您看到的是OOM:Metaspace还是JavaHeap