【发布时间】: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