【问题标题】:Memory leak in java web applicationjava web应用程序中的内存泄漏
【发布时间】:2015-11-18 20:30:35
【问题描述】:

我有一个使用 hibernate 3.6.4 和 spring 3.2.4(mvc、tx 和安全性)并在 tomcat 7 中运行的 Web 应用程序。每次我在不重新启动 tomcat 的情况下部署我的应用程序的新版本时,然后tomcat使用的内存增加了大约50MB。

我创建了一些堆转储并使用 Eclipse 内存分析器对其进行了分析。我发现每次重新部署应用程序时,都会创建一个新的 WebappClassLoader 实例。但即使在我使用 tomcat 管理器停止应用程序之后,WebappClassLoader 仍保留在内存中并且不会被垃圾收集。 因此,每次重新部署后,都会有一个额外的 WebappClassLoader 保留在内存中并使用大约 50MB 的内存。

我使用 Eclipse 内存分析器来查找从 WebappClassLoader 到 GC 根的引用路径。结果,我找不到任何可以阻止 WebappClassLoaders 被垃圾收集的强引用。

那么,是什么让 WebappClassLoaders 保持活力?为了找出阻止 WebappClassLoader 进行垃圾收集的原因,我还能在哪里进行调查?

我认为可能存在阻止 GC 完成垃圾回收的阻塞 finalize() 方法。但是我怎么检查这个呢?

【问题讨论】:

  • 你在tomcat7中使用org.apache.catalina.core.JreMemoryLeakPreventionListener
  • @awsome 是的,我愿意。据我了解,在 tomcat 7 中默认启用 JreMemoryLeakPreventionListener。默认 server.xml 包含以下条目:<!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

标签: java memory-leaks tomcat7 classloader eclipse-memory-analyzer


【解决方案1】:

理论上,类加载器会在没有引用对象实例并且不需要卸载类时进行垃圾收集,但实际上它似乎更有问题。

我会推荐阅读这两篇文章

http://frankkieviet.blogspot.com.au/2006/10/classloader-leaks-dreaded-permgen-space.html

http://frankkieviet.blogspot.com.au/2006/10/how-to-fix-dreaded-permgen-space.html

【讨论】:

  • 在第一篇文章中声明:​​"...我们当时尝试的所有profilers,都没有通过classloaders跟随链接" 文章写于2006年. JProfiler 和 Eclipse Memory Analyzer 的当前版本确实(仍然)不遵循跨类加载器的引用吗?
【解决方案2】:

您也可以按照Anatomy of a PermGen Memory Leak 教程中的步骤进行操作。他们正在使用Java Visual VM,但在 Eclipse Memory Analizer 中检查的步骤和内容也应该相同。在this 演示文稿中,您可以找到此类泄漏的可能原因。

另外请注意,如果您没有看到对 WebappClassLoaders 的任何引用,则可能是 JVM 有很多 PermGen 并且正在推迟驱逐。您可以通过运行较小的 PermGen 大小来轻松检查这一点,并进行几次重新部署。

【讨论】:

    【解决方案3】:

    我不是 Tomcat 方面的专家,它是重新部署实现,但在我们使用 JBoss 的日子里,我们遇到了非常相似的情况。这是因为 PermGen 空间没有被垃圾收集,并且每个新的部署都会将类放在那里。 因此,如果您不在 Java 8 上,请检查实际的“泄漏”是否不在 permgen 空间中。

    【讨论】:

      猜你喜欢
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 2011-10-09
      • 1970-01-01
      • 2015-12-30
      相关资源
      最近更新 更多