gpt4 book ai didi

java - JBoss热部署时出错

转载 作者:行者123 更新时间:2023-11-30 11:39:46 25 4
gpt4 key购买 nike

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

我们构建 war 并使用 Jenkins 在服务器中进行热部署。有时,我们会在 JBoss 中遇到一些内存不足的错误。

我想知道热部署是否是造成这种情况的原因。另外,想知道热部署是否比正常的手动启停部署有任何缺陷。

有人可以提供一些有值(value)的意见吗?

最佳答案

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

Also, would like to know if hot deployment has any pitfalls over normal manual start-stop deployment.

当您在部署之间手动启动和停止服务时,您可能会在清理 Web 应用程序时有点马虎 - 没有人会知道。

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

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

如果您使用的是像 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 那么可能是应用程序中的内存没有被清理

关于java - JBoss热部署时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13091915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com