Java 在wildfly上重新部署导致outofmemory:元空间

Java 在wildfly上重新部署导致outofmemory:元空间,java,spring,wildfly-8,Java,Spring,Wildfly 8,我目前正在调查我们最近遇到的一些超空间问题。一个主要的罪魁祸首似乎是在战争重新部署时加载重复的类。通过完全取消部署后的堆转储在本地进行尝试(仅使用我们的一场战争),我可以看到应用程序创建的大多数实例仍然存在(即使在垃圾收集之后) 从堆转储中,我可以看到保存引用的似乎是ManagedThreadFactoryImpl 有什么我可以做/添加到应用程序关闭过程中,以便它在关闭后进行清理吗 我们所有的WAR都是spring应用程序,大多数都使用调度/异步元素 我们将JDK8与Wildfly 8.2一起使

我目前正在调查我们最近遇到的一些超空间问题。一个主要的罪魁祸首似乎是在战争重新部署时加载重复的类。通过完全取消部署后的堆转储在本地进行尝试(仅使用我们的一场战争),我可以看到应用程序创建的大多数实例仍然存在(即使在垃圾收集之后)

从堆转储中,我可以看到保存引用的似乎是ManagedThreadFactoryImpl

有什么我可以做/添加到应用程序关闭过程中,以便它在关闭后进行清理吗

我们所有的WAR都是spring应用程序,大多数都使用调度/异步元素


我们将JDK8与Wildfly 8.2一起使用,似乎类加载器没有卸载。尝试Java任务控制(JMC)并记录用例。这使您可以转到录制中的特定时间点并调试问题。它通过stacktrace、threaddumps和许多重要的东西提供在特定时间加载的类的快照

JMC包含在JDK中。您可以在此处找到更多信息:


您不必经历获取堆转储的痛苦,然后等待工具对其进行分析。

JDK8和wildfly 10也有同样的问题。Java 11和wildfly 14也会出现这种情况。