这是我一直以来的老问题。我想在开发环境中重新部署。经过一些部署后,我耗尽了permgen,不得不杀掉服务器。多年前我试图找到解决问题的办法,但发现Spring和Hibernate相互指责这个问题。有没有找到解决方案?重新部署时,是否仍然无法摆脱PermgenSpace异常?
Spring Roo声称它不会在运行时生成类,所以它不会成为问题。它是否真的有效,如果有,我该如何配置我的应用程序?
我知道这里有两个问题,但如果你能回答一个就足够了:)
这是我一直以来的老问题。我想在开发环境中重新部署。经过一些部署后,我耗尽了permgen,不得不杀掉服务器。多年前我试图找到解决问题的办法,但发现Spring和Hibernate相互指责这个问题。有没有找到解决方案?重新部署时,是否仍然无法摆脱PermgenSpace异常?
Spring Roo声称它不会在运行时生成类,所以它不会成为问题。它是否真的有效,如果有,我该如何配置我的应用程序?
我知道这里有两个问题,但如果你能回答一个就足够了:)
如果您在linux下运行您的应用程序,那么使用IBM JRE运行您的应用程序将解决此问题。
IBM JRE是否支持Java 6?看起来像他们只支持高达1.5 – palto 2010-10-18 06:30:47
是的,它的确如此:请参阅https://www.ibm.com/developerworks/java/jdk/linux/download.html – 2011-01-15 08:08:20
有一对夫妇的事情,可以用一些这方面的帮助。 Spring有一个“IntrospectionCleanupListener”,可以帮助一点点。如果您要在Web应用程序中加载和创建JDBC连接,则可以有一个servlet上下文侦听器,它将取消注册您在应用程序中加载的驱动程序。这些帮助,但不完全解决问题。
据我了解,典型的PermGen存储泄漏是这样的。
某处存在对某些对象的可达引用,该对象的类已被热部署取代。
该对象具有对其类描述符的引用。
该类描述符具有对其ClassLoader的引用。
ClassLoader对所有已加载的类的类描述符都有引用。
每个类描述符都具有对静态帧,其字节码,其本地代码等的引用。
对一个物体的一个引用足以导致泄漏泄漏。如果可能是一个枚举值,听众还没有被注册,...
编辑
由谁遇到这样的问题是耸耸肩膀,增加PermGen的堆人所采取的惯常做法尺寸。如果你真的需要解决这个问题为您的Web应用程序(一个或多个),然后:
我不知道Hibernate是否存在特定问题,但是任何复杂的框架都可能会受到这种问题的影响,无论是单独还是与应用程序代码结合使用。
你是否知道在使用Hibernate时总会发生这种情况,还是我可能犯的一个错误?有没有办法来检测这些泄漏? – palto 2010-10-11 18:16:00
只是增加服务器的永久空间 – 2010-10-11 13:13:03
是的,这一直是“解决方案”,我不满意。它不能解决问题。 – palto 2010-10-11 13:18:34