我有一个要部署到 Jboss EAP 6.1 的 EAR 项目。我的 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 空间:java.lang.OutOfMemoryError:PermGen 空间”。我厌倦了将我的 PermGen 内存增加到 700MB,但没有运气。所以我怀疑 hotswap-agent 正在监视我 EAR 中的所有类,包括 lib 目录中的类,这导致它消耗了太多内存。
我研究的下一个地方是默认禁用热交换,方法是在 hotswap-agent.properties 中放置 autoHotswap=false。如上所示,我尝试将此文件放置在 EAR 以及 EJB 和 WAR 类路径中,但没有任何区别。我也尝试过像这样添加到 JVM_OPTS 中,但无济于事:
-javaagent:/workspace/tools/hotswap-agent-1.0.jar=disablePlugin=Deltaspike,disablePlugin=JavaBeans,autoHotswap=false"
所以我的问题是,如何在我的环境中控制热插拔代理?还有一种方法可以只查看指定包中的类,比如“com.foobar”吗?最后,为 jboss 上的 ear 部署配置 hotswap-agent 的正确方法是什么。