Tomcat 会话未过期

Wil*_*ass 6 tomcat

我在会话累积时遇到问题。我在 Windows 服务器上运行 Tomcat 6.0.18 的实例。我有 3 个应用程序。

我一直有内存问题(接近堆大小或 OOM)。当我查看 Tomcat 管理器时,我在 3 个应用程序中的每一个中看到 500-1000 个会话。当我在 Tomcat 管理器中查看会话时,我可以看到一些会话处于空闲时间多个小时,但它们并没有过期。

其中一个 webapps 有 10 分钟的超时时间,但在代码中设置为 60 分钟(对于某些用户)。其他应用程序有 15 分钟和 30 分钟的超时时间。我还有一个问题,即 webapp 1 使用错误的会话 cookie 重复命中(这与我的 mod_jk 负载平衡有关),这会增加会话计数。(使用单个请求创建的许多会话都有 60 分钟的超时时间)。但令我感到困惑的是,webapp 2 和 3 的会话也越来越多,而且它们甚至在超时后仍然存在。

我的理论是会话清理仅在服务器负载不重时才发生,并且(在这种情况下)如此多的会话累积,服务器的可用 CPU 很少,并且清理永远不会运行。但是我找不到任何参考资料来支持这个理论。

有谁知道会话过期算法的细节?它并不完全在超时分钟内运行——它什么时候运行?

小智 -1

您可以通过上下文配置禁用会话持久性,如Apache Tomcat 配置参考中所述:

禁用会话持久性

如上所述,默认情况下每个 Web 应用程序都配置了标准管理器实现,并且它在重新启动时执行会话持久性。要禁用此持久性功能,请为您的 Web 应用程序创建一个上下文配置文件,并在其中添加以下元素:

<Manager pathname="" />
Run Code Online (Sandbox Code Playgroud)