[英]Constant java.lang.OutOfMemoryError: PermGen space Arquillian + Wildfly 8.1
[英]Hotswap-agent on JBoss EAP 6.1 - java.lang.OutOfMemoryError: PermGen space
我有一個EAR項目,我正在部署到Jboss EAP 6.1。 我的maven構建的產品看起來像這樣:
myapp-ear
├── myapp-ejb.jar
├── myapp-web.war
├── lib
│ ├── activation.jar
│ ├── activiti-bpmn-converter.jar
│ ├── activiti-bpmn-model.jar
.....
│ ├── xml-apis.jar
│ └── xmlbeans.jar
└── META-INF
├── application.xml
├── hotswap-agent.properties
├── myapp-ds.xml
├── jboss-deployment-structure.xml
└── MANIFEST.MF
以下是我在部署應用程序時在jboss日志中獲得的內容:
21:34:55,570 INFO [stdout] (MSC service thread 1-5) HOTSWAP AGENT: 21:34:55.569 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.jbossmodules.JBossModulesPlugin' initialized in ClassLoader 'ModuleClassLoader for Module "deployment.myapp-ds.xml:main" from Service Module Loader'.
21:35:04,357 INFO [org.jboss.as.server.deployment] (MSC service thread 1-5) JBAS015876: Starting deployment of "null" (runtime-name: "myapp-web.war")
21:35:04,357 INFO [org.jboss.as.server.deployment] (MSC service thread 1-6) JBAS015876: Starting deployment of "null" (runtime-name: "myapp-ejb.jar")
21:35:04,781 INFO [org.jboss.as.jpa] (MSC service thread 1-3) JBAS011401: Read persistence.xml for myproject
21:35:05,306 INFO [stdout] (MSC service thread 1-7) HOTSWAP AGENT: 21:35:05.306 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.jbossmodules.JBossModulesPlugin' initialized in ClassLoader 'ModuleClassLoader for Module "deployment.myapp-ear.ear:main" from Service Module Loader'.
和
21:35:05,488 INFO [stdout] (MSC service thread 1-6) HOTSWAP AGENT: 21:35:05.487 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.hotswapper.HotswapperPlugin' initialized in ClassLoader 'ModuleClassLoader for Module "deployment.myapp-ear.ear.myapp-web.war:main" from Service Module Loader'.
21:35:05,520 INFO [stdout] (MSC service thread 1-4) HOTSWAP AGENT: 21:35:05.517 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.jbossmodules.JBossModulesPlugin' initialized in ClassLoader 'ModuleClassLoader for Module "deployment.myapp-ear.ear.myapp-ejb.jar:main" from Service Module Loader'.
問題是,當我將我的耳朵部署到jboss時,它需要大約10倍的正常時間,當我嘗試從瀏覽器訪問應用程序時,它會拋出“PermGen space:java.lang.OutOfMemoryError:PermGen space”。 我厭倦了將我的PermGen內存增加到700MB,但沒有運氣。 所以我懷疑hotswap-agent正在觀察我的EAR中的所有類,包括lib目錄中的那些導致它消耗太多內存的類。
我調查的下一個地方是默認情況下禁用hotswap,方法是在hotswap-agent.properties中放置autoHotswap = false。 我嘗試將此文件放在EAR中,如上所示,以及EJB和WAR類路徑,但它沒有任何區別。 我也試過,無法添加到JVM_OPTS中,如下所示:
-javaagent:/workspace/tools/hotswap-agent-1.0.jar=disablePlugin=Deltaspike,disablePlugin=JavaBeans,autoHotswap=false"
所以我的問題是,如何在我的環境中控制hotswap-agent? 還有一種方法只能觀察指定包中的類,比如“com.foobar”嗎? 最后,為jboss上的ear部署配置hotswap-agent的正確方法是什么。
最后,在hotswap-agent論壇上 ,在Vladimir的幫助下,我的項目得到了hotswap-agent 。 他說這有助於解決失控的PermGen內存:
JBossAS為jar,war等每個模塊都有單個classLoader。在該帳戶中,運行JbossAS中可能有很多模塊類加載器。 與HotswapAgent一起將它的類復制到每個模塊類加載器(否則HotswapAgent在模塊類加載器中不起作用)。 因此,JVM可以多次加載相同的HotswapAgent類! 至於復制globaly disabled插件,它是bug,我們應該修復它。 您可以直接從hotswap-agent.jar中刪除未使用的插件作為解決方法,它應該有助於提高性能。
一旦我從jar中刪除了不需要的插件,我就可以在合理的時間內啟動jboss和PermGen內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.