gpt4 book ai didi

java - 为什么 webappclassloader 没有被垃圾回收?

转载 作者:搜寻专家 更新时间:2023-11-01 02:45:09 26 4
gpt4 key购买 nike

我有一个由 spring/hibernate 开发的 web 服务,当我在 Tomcat 7 上多次部署和取消部署时,我得到 outOfMemoryError PermGen 内存泄漏。

通过使用 java VisualVM,我注意到之前的 webappClassLoader 仍然保留在 JVM 中,因此它们没有被垃圾回收。

这个问题的原因可能是什么?

如何检测哪些对象仍然引用应用程序类加载器或它加载的任何对象?

谢谢,

最佳答案

简短的回答是您有内存泄漏。根据经验,这很可能在您的 Web 应用程序或它正在使用的库中。也有可能,但不太可能,您在 Tomcat 中发现了内存泄漏。

追踪内存泄漏的简短版本是:

  • 启动Tomcat
  • 取消部署并重新部署有问题的应用程序一次
  • 使用分析器检查堆
  • 寻找 WebappClassLoader 的实例
  • 找到被强持有但属性为started = false的那个
  • 跟踪该 WebappClassLoader 实例的 GC 根
  • 这将指向你的内存泄漏

找到内存泄漏的根本原因可能有点困难。

有关如何追踪此类内存泄漏以及可能导致它们的原因的更完整解释,请参阅此演示文稿:http://people.apache.org/~markt/presentations/2010-08-05-Memory-Leaks-JavaOne-60mins.pdf

关于java - 为什么 webappclassloader 没有被垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24282091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com