【问题标题】:Out of memory error whenever Tomcat reloads context of MyFaces webapplication每当 Tomcat 重新加载 MyFaces Web 应用程序的上下文时出现内存不足错误
【发布时间】:2012-01-08 20:50:27
【问题描述】:

我最近使用 tomahawk 迁移到 myfaces(在这个成功的线程 link 之后),每当我编写新代码并且应用程序 (Tomcat) 重新加载上下文时,我都会出现内存不足错误。这是通用的重新加载消息:“INFO: Reloading Context with name [/Auctions] has started”

几秒钟后紧随其后的是:"Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space"

我知道我可以增加内存(顺便说一句,应该直接在 Tomcat 中完成,还是在 Eclipse 中的某个地方完成?)但是这个内存不足错误过去只在几次重新加载后才会弹出,现在它减慢了我的速度发展。

另外,我显然很关心部署。

我该怎么办?

编辑:

似乎相关的一件事:我收到 2 条这样的警告消息:

"WARNING: Cannot serialize session attribute auctionsViewBean for session CB0149C43DF44F5AA6A084A022F1D418" 

紧接着

java.io.NotSerializableException: org.apache.catalina.session.StandardSessionFacade. 

然后发生内存不足错误。

现在,AuctionsViewBean 实现了 Serializable,但我正在阅读here,除非 bean 没有参数构造函数,否则它可能不会被重新序列化到会话中。我的 bean 确实有一个无参数构造函数,但我在其中设置了一些值。这会导致问题吗?

如果是这样 - 无论如何,真的 - 在 bean 中设置值的最佳位置是什么?它是在构造函数中,还是在其生命周期的其他地方?

【问题讨论】:

  • 谢谢,BalusC。这里没有任何内容跳出页面,但我对其进行了更多研究并编辑了问题。
  • 该链接解释了这种错误是如何产生的以及应该如何解决。问题的根本原因不在 Tomcat 本身,而在 webapp 本身。在您的情况下,它似乎是由 MyFaces 和/或 Tomahawk 引起的。
  • 这是一个古老的已知问题,很久以前就已经讨论并解决了。我会更详细地回答这个问题。
  • 好吧,看起来我无法回答自己的问题,因为我被“降级”了。伟大的。无论如何,我会尝试用相关信息发表评论:问题已解决。我将尝试描述这个过程,因为我不确定我做的第一件事(我绝对不是 JSF 2 专家。)从我读到的关于这个主题的所有 bean 和模型对象,需要实现可序列化,并且有一个无参数构造函数。它还有助于不将会话引用作为 bean 上的实例变量。 (...继续下面...)

标签: tomcat jsf-2 out-of-memory myfaces


【解决方案1】:

我记得很久以前在MyFaces users list 上的这个问题。出现警告是因为您有一个会话 bean,而该 bean 没有实现可序列化。重新加载上下文时,Tomcat 尝试序列化会话范围内的所有内容,从而导致问题。

可能会导致 java.lang.OutOfMemoryError 多次重新启动应用程序,但这是因为 Tomcat 从其类加载器加载和卸载类,所以无论如何都会发生。很久以前,发现了一些导致内存泄漏的问题MYFACES-3158MYFACES-3001MYFACES-2942,但请注意这些问题已经解决。当时的问题是因为有一些引用不允许GC回收tomcat webapp classloader。

【讨论】:

  • 谢谢,lu4242。实际上,我所有的 bean 都实现了 Serializable。我正在阅读here 他们也应该有一个无参数的构造函数。在我的应用程序中,所有这些都可以,但其中一些设置了几个变量,我有预感这是导致问题的原因。你怎么看?另外,如果我不能在构造函数中设置变量,我应该在哪里做呢?也许在 preRenderView() 中?还是 bean 生命周期中的其他地方?
  • 快速更新:出现可序列化问题是因为我在 bean 的构造函数中引用了会话。我删除了它,还将初始化代码从构造函数移到了@PostConstruct 方法。序列化异常消失了。每当我更改代码并重新加载上下文时,内存不足错误仍然存​​在。
猜你喜欢
  • 1970-01-01
  • 2016-05-07
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 2012-12-30
相关资源
最近更新 更多