我有一个由Tomcat6提供服务的JSF应用程序,每个会话可能会在"会话"范围内获得分配给它的viewScoped bean作为托管bean。问题是,即使在会话处于空闲状态数小时后,用于存储该bean的内存似乎也从未被释放。
在会话空闲了一段时间(比如10分钟)后,有什么方法可以强制Tomcat释放这个内存吗?如果没有,那么如何通过编程手动释放此内存?或者,"会话"范围中的"托管bean"的一个特性是,它将一直保存在内存中,直到服务器关闭,不管怎样?提前感谢!
但是viewScoped bean可能不会被释放。因为如果单击过期页面上的链接,tomcat控制台中的日志显示服务器端的UIViewRoot仍然有效。日志:前阶段RESTORE_VIEW 1afterPhase-RESTORE_VIEW 1时间:3前阶段RENDER_RESPONSE 6服务器进程的内存并没有下降。如果服务器运行时间相对较长。应用程序的响应非常缓慢,而且似乎不健壮,例如分页器不起作用等等。即使服务器关闭,控制台打印输出:正在等待释放16个实例
有人知道这件事吗?
您的会话范围的托管bean不会被解除分配,因为会话尚未超时。您需要在部署描述符文件(web.xml
)中指定会话的可接受超时。以下示例以分钟为单位。10分钟后,会话将无效,并且您的会话范围的bean应该被销毁。
<session-config>
<session-timeout>10</session-timeout>
</session-config>