這是我一直以來的老問題。我想在開發環境中重新部署。經過一些部署後,我耗盡了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