每当Tomcat重新加载MyFaces Web应用程序的上下文时出现内存不足错误

时间:2011-11-29 14:04:38

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

我最近使用tomahawk移动到myfaces(跟随此成功的线程link),每当我编写新代码并且应用程序(Tomcat)重新加载上下文时,我就会出现内存错误。这是通用的重新加载消息:“INFO:重新加载具有名称[/ Auctions]的上下文已经开始”

几秒钟之后:"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的最佳位置是什么?它是在构造函数中,还是在其生命周期的其他位置?

1 个答案:

答案 0 :(得分:0)

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

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