Tomcat 会话未过期

Tomcat 会话未过期

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

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

其中一个 Web 应用程序的超时时间为 10 分钟,但在代码中设置为 60 分钟(对于某些用户)。其他应用程序的超时时间为 15 分钟和 30 分钟。我还遇到一个问题,即 Web 应用程序 1 不断收到错误的会话 cookie 的点击(这与我的 mod_jk 负载平衡有关),这会增加会话数。(单个请求会创建大量会话,然后超时时间为 60 分钟)。但令我感到困惑的是,Web 应用程序 2 和 Web 应用程序 3 的会话数也很高,而且它们甚至在超时后仍会继续存在。

我推测会话清理仅在服务器负载不大时才会发生,并且(在这种情况下)累积的会话太多,导致服务器的可用 CPU 不足,清理永远不会运行。但我找不到任何参考资料来支持这一理论。

有人知道会话过期算法的详细信息吗?它并不是按照超时分钟数准确运行的——它什么时候运行?

答案1

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

禁用会话持久性

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

<Manager pathname="" />

相关内容