我有一個基於SpringRoo的應用程序在生產環境中運行,這是一些熱重新部署後導致嚴重的permgen內存泄漏。Permgen內存泄漏與熱重新部署和Oracle數據庫
爲了「查找並修復」泄漏並減少分析過程中的變量,我使用roo創建了一個簡單的,簡化的應用程序,並且我獲得了相同的行爲。 該項目(使用Spring Roo(1.2.3.RELEASE)創建)只是將名爲'Person'的實體與名爲'name'的字符串字段保持一致。
我將戰爭部署在Tomcat 7.0.39上,使用Oracle 11.2.0.2作爲數據庫。 每次重新部署後,我得到了catalina.out的
INFO: Undeploying context [/ojdbc-0.1.0.BUILD-SNAPSHOT]
mag 06, 2013 10:50:43 AM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [/ojdbc-0.1.0.BUILD-SNAPSHOT] registered the JDBC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
此消息兩個熱重新部署,我得到一個PermGen的錯誤後:
mag 06, 2013 10:51:08 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /Applications/apache-tomcat-7.0.39/webapps/ojdbc- 0.1.0.BUILD-SNAPSHOT.war
Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]"
Exception in thread "RMI TCP Connection(idle)" mag 06, 2013 10:51:17 AM ServerCommunicatorAdmin reqIncoming
WARNING: The server has decided to close this client connection.
java.lang.OutOfMemoryError: PermGen space
Exception in thread "RMI TCP Connection(idle)" java.lang.OutOfMemoryError: PermGen space
我試圖分析這種與VisualVm/EclipseMemory分析器,這是我到目前爲止。
事實是,我不與其它數據庫(例如PostgreSQL的,高超音速)觀察此行爲。是否有與Oracle相關的東西導致泄漏?
Here是一個包含roo腳本生成器和an.hprof轉儲文件的zip壓縮文件。
好吧,你的答案感謝,不幸的是,應用服務器是不是我的管理下.. 。現在我已經在一個臨時的tomcat下部署了應用程序,我可以隨時重新啓動。 這不是一個解決方案,當然......但它是我迄今爲止唯一的解決方案... – paoloyx 2013-07-01 12:28:48
編輯原始答案並附加內容 – Ryan 2013-07-01 13:08:44
好的,非常感謝你,我會試一試。 我會讓你知道結果。 – paoloyx 2013-07-03 08:24:36