2011-06-29 67 views
0

我有一个由Tomcat 6提供服务的JSF应用程序,并且每个会话都可以在“会话”作用域中将它分配给它的viewScoped bean作为托管bean。问题在于用来存储这个bean的内存似乎并没有被释放,即使在会话在空闲状态下花费了数小时之后。即使会话无效,管理的bean也不会被释放

有没有什么方法可以强制Tomcat在会话空闲一段时间(例如说10分钟)之后释放此内存?如果没有,如何通过编程方式手动释放此内存?或者是“会话”作用域中“托管bean”的特性之一,它将在服务器关闭之前一直存储在内存中,不管是什么? 在此先感谢!

但viewScoped bean可能不会被释放。因为如果点击过期页面上的链接,tomcat控制台中的日志显示服务器端的UIViewRoot仍然存在。日志: beforePhase-RESTORE_VIEW 1周 afterPhase -RESTORE_VIEW 1周时间:3 beforePhase-RENDER_RESPONSE 6 而服务器进程的内存并没有下降一点点。如果服务器运行时间较长。应用程序的响应如此缓慢,似乎不健壮,如分页程序不起作用等等。 即使在服务器关闭时,控制台打印输出: 等待16例(县)被释放

是否有任何人知道这件事吗?

+0

这不是JSF/PrimeFaces的责任。这是GC的责任。运行一个分析器。 – BalusC

回答

0

由于会话没有超时,您的会话作用域托管的bean不会被释放。您需要在部署描述符文件(web.xml)中指定会话的可接受超时值。以下示例在几分钟内。 10分钟后,会话将失效,会话范围的bean应该被销毁。

<session-config> 
     <session-timeout>10</session-timeout> 
</session-config> 
+0

我知道这个参数,并且会话在X分钟后也超时。您可以看到我编辑了我的答案。 – leo173

相关问题