【问题标题】:Hotswap-agent on JBoss EAP 6.1 - java.lang.OutOfMemoryError: PermGen spaceJBoss EAP 6.1 上的 Hotswap-agent - java.lang.OutOfMemoryError: PermGen space
【发布时间】:2017-04-08 01:47:24
【问题描述】:

我有一个 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 空间: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 的正确方法是什么。

【问题讨论】:

    标签: maven ear jboss-eap-6 dcevm hotswapagent


    【解决方案1】:

    hotswap-agent forum 中的Vladimir 的帮助下,终于让hotswap-agent 在我的项目中工作了。他所说的这有助于解决失控的 PermGen 内存:

    JBossAS 为每个模块(如 jar、war 等)提供单个类加载器。 该帐户可能有很多模块类加载器正在运行 JbossAS。除了 HotswapAgent 将它的类复制到每个 模块类加载器(这是必需的,否则 HotswapAgent 不会 在模块类加载器中工作)。因此相同的 HotswapAgent 类 JVM可以多次加载!至于全球的复制 禁用插件,这是错误,我们应该修复它。你可以删除 未使用的插件直接从 hotswap-agent.jar 作为解决方法,它 应该有助于提高性能。

    一旦我从 jar 中删除了不需要的插件,我就可以在合理的时间和 PermGen 内存中启动 jboss。

    【讨论】:

      猜你喜欢
      • 2012-11-25
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多