繁体   English   中英

在JBoss中热部署期间出错

[英]Error during hot deployment in JBoss

我正在使用JBoss作为应用程序服务器的Java / J2EE项目中工作。

我们使用Jenkins进行战争并在服务器中进行热部署。有时,我们在JBoss中遇到了Out of Memory错误。

我想知道热部署是否对此负责。 此外,想知道热部署是否比正常的手动启停部署有任何陷阱。

有人可以提供一些宝贵的意见吗?

我同意关于调整堆/ 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则可能是您应用程序中的内存没有被清理

热部署不会清除Perm Gen中先前加载的Class实例。它会重新加载Class实例。 一个小小的Google向我指出了SO 是什么使热部署成为一个“难题”?

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

-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中进行设置, run.sh所示:

-Xms256m -Xmx1024m -XX:MaxPermSize=512m

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM