gpt4 book ai didi

java - 重新部署时是否仍然无法摆脱 PermgenSpace 异常?

转载 作者:行者123 更新时间:2023-12-02 03:57:20 25 4
gpt4 key购买 nike

这是我一直遇到的一个老问题。我想在开发环境中重新部署。经过一些部署后,我用完了 permgen,不得不终止服务器。几年前,我试图找到问题的解决方案,但只是发现 Spring 和 Hibernate 互相指责对方造成了这个问题。有找到解决办法吗?

Spring Roo 声称它不会在运行时生成类,因此这不会成为问题。它真的有效吗?如果有效,我该如何配置我的应用程序?

我意识到这里有两个问题,但如果你能回答一个就足够了:)

最佳答案

据我了解,典型的 PermGen 存储泄漏是这样的。

  1. 某处存在对其类已被热部署替换的某个对象的可访问引用。

  2. 该对象具有对其类描述符的引用。

  3. 类描述符有对其类加载器的引用。

  4. 类加载器引用了它已加载的所有类的类描述符。

  5. 每个类描述符都引用类静态框架、字节码、 native 代码等。

仅对一个对象的一次引用就足以导致永久生成泄漏。如果可以是一个枚举值,一个尚未注销的监听器,...

编辑

遇到此问题的人采取的正常方法是耸耸肩并增加 PermGen 堆大小。如果您确实需要解决 Web 应用程序的问题,那么:

  • 查看您的网络应用关闭的方式,确保数据库连接/连接池已关闭、所有回调均未注册等。
  • 使用 Java 内存分析器来跟踪由重新部署触发的 PermGen(和其他)内存泄漏。
  • 如果随着您的网络应用的发展出现新的漏洞,请准备好重复此过程。

我不知道 Hibernate 是否存在特定问题,但任何复杂的框架都可能容易受到此类问题的影响,无论是其本身还是与应用程序代码结合使用。

关于java - 重新部署时是否仍然无法摆脱 PermgenSpace 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3906487/

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