首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JBoss热部署时出错

JBoss热部署时出错
EN

Stack Overflow用户
提问于 2012-10-27 01:52:15
回答 3查看 1.7K关注 0票数 2

我在一个Java/J2EE项目中工作,使用JBoss作为应用服务器。

我们使用Jenkins.Sometimes构建我们的war并在服务器上进行热部署,我们在JBoss中得到了一些内存不足的错误。

我想知道这是不是热部署造成的。此外,我想知道热部署是否存在常规手动启动-停止部署的陷阱。

有没有人能提供一些有价值的意见?

EN

回答 3

Stack Overflow用户

发布于 2012-10-27 03:04:03

我同意关于调整堆/permgen空间的答案,尽管如果没有更多关于允许多少内存,您正在使用什么等等的信息,就很难具体说明。

此外,

还想知道热部署是否存在常规手动启动-停止部署的陷阱。

当你在部署之间手动启动和停止服务时,你可能会在清理你的web应用程序时有点草率--而且永远不会有人知道。

热部署时,servlet上下文的前一个实例将被销毁。为了减少OutOfMemory异常的发生频率,您需要确保在发生这种情况时,您可以自行清理。即使您对类加载器PermGen内存问题无能为力,您也不希望通过引入额外的内存泄漏来使问题复杂化。

例如,如果您的war文件启动了任何工作线程,则需要停止这些线程。如果您在JNDI中绑定了一个对象,那么该对象应该是未绑定的。如果有任何打开的文件,数据库连接等,这些都应该关闭。

如果你使用的是像Spring这样的web框架--很多事情都已经解决了。Spring注册了一个ServletContextListener,当servlet上下文被破坏时,它会自动停止容器。但是,您仍然需要确保在init期间创建资源的任何bean将在destroy期间清理这些资源。

如果您正在做一个手工制作的servlet,那么您可能希望在您的web.xml文件中注册ServletContextListener的实现,并在contextDestroyed的实现中清理所有资源。

顺便说一句,你应该在你的答案中包含确切的OutOfMemory异常。如果它显示类似java.lang.OutOfMemoryError: PermGen space的内容,那么可能是类实例的问题,您可以做的并不多。如果是java.lang.OutOfMemoryError: Java heap space,那么可能是应用程序中的内存没有被清理

票数 1
EN

Stack Overflow用户

发布于 2012-10-27 01:57:23

热部署不会清除Perm Gen.中先前加载的Class实例。它会重新加载Class实例。一点谷歌指引我回到了SO What makes hot deployment a "hard problem"?

票数 0
EN

Stack Overflow用户

发布于 2012-10-27 02:12:27

您应该增加堆空间,特别是Perm空间

代码语言:javascript
复制
-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-XX:MaxPermSize   set maximum Permanent generation size

您可以在jboss run.shrun.bat中的JAVA_OPTS中设置它,如下所示:

-Xms256m -Xmx1024m -XX:MaxPermSize=512m

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13091915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档