Tomcat JVM保留对象中ParallelWebAppClassLoaders的多个实例的行为

问题描述 投票:0回答:1

我正在努力在运行Spring MVC应用程序的Tomcat 8.5.38服务器(Centos 7.6,openjdk 1.8,4 CPU)中识别重复的OutOfMemory问题。

此问题是此应用的新功能。 (编辑:问题在Tomcat从8.5.35升级到8.5.38后开始)。我通过添加“-XX:+ HeapDumpOnOutOfMemoryError”JVM设置来保存内存堆转储。在堆转储中,我看到有两个ParallelWebAppClassLoader实例。此应用程序使用大型HashMap(大约200 Mb)的查找值作为缓存。每个类加载器都有一个对此HashMap的单独引用。我试图找到为什么在这个JVM中有2个ParallelWebAppClassLoader实例? server.xml未指定使用ParallelWebAppClassLoader。

期望ParallelWebAppClassLoader维护HashMap的副本也是正确的吗?

如果它是同一对象的2个副本,如果使用ParallelWebAppClassLoader,如何优化此重复空间?

memory-leaks jvm tomcat8 heap-dump catalina
1个回答
0
投票

问题是因为Tomcat从8.5.35升级到8.5.35。在此次升级之后,JVM有两个类加载器,因此占用了两倍的内存。快速修复可以通过增加RAM或将Tomcat版本回滚到8.5.35来实现。

如果有设置来控制类加载器的数量,请发一个答案。我会赞成这一点。

© www.soinside.com 2019 - 2024. All rights reserved.