【问题标题】:Tomcat 8 session persistence after kill -9 <PID>杀死 -9 <PID> 后的 Tomcat 8 会话持久性
【发布时间】:2015-10-29 14:12:38
【问题描述】:

执行 kill -9 后,我试图了解 tomcat(版本 8.0.21)的会话持久性。当我启动我的tomcat(使用startup.sh)时,我观察到我的网络应用程序的(随机)http会话(在kill命令执行之前创建)仍在维护中。 如果我执行 shutdown.sh 以停止 tomcat 然后再次启动 tomcat,我了解此会话在重新启动时的持久性。我对 kill -9 的理解有点类似于“关机”。所以我的问题是:

  1. 是否在 kill -9 之后立即调用标准管理器实现,它会尝试在终止之前保持会话。
  2. 或者我只是获取上一个会话,因为我的 tomcat 可能已经序列化了少数会话(在其临时目录的某个位置),而它更早(在执行 kill -9 之前)。

【问题讨论】:

  • 在 SIGKILL 上不应调用此类方法(仅适用于 SIGTERM)。
  • 请务必说明您使用的是哪个版本的 Tomcat。我不确定,但行为肯定会在版本之间发生变化。

标签: java session tomcat kill-process


【解决方案1】:

Tomcat session manager documentation 对这个话题有很多话要说。以下是一些相关的宝石:

Tomcat 提供了两种标准的 Manager 实现供使用——默认的一种存储活动会话,而可选的一种将已换出的活动会话(除了在 Tomcat 重新启动时保存会话)存储在存储位置。 .

...

每当 Apache Tomcat 正常关闭并重新启动时,或触发应用程序重新加载时,标准的管理器实现将尝试序列化所有当前活动的会话...

强调我的 - 我认为重要的是要注意,当您重新加载应用程序时,活动会话会被序列化。如果您最近重新加载了应用程序,然后执行kill -9(正如 cmets 中正确指出的那样,它不会给 Tomcat 发出警告,也没有时间清理任何东西,因此只能作为最后的手段),那么您确实会看到会话在重启过程中持续存在。

您也可能配置了持久存储管理器:

除了创建和删除会话的常规操作之外,PersistentManager 还能够将活动(但空闲)会话交换到持久存储机制,以及在 Tomcat 正常重启期间保存所有会话.

虽然我会说除非您进行了此配置,或者为您预先配置了此 Tomcat 安装,否则情况并非如此。

【讨论】:

  • 感谢您的评论。我自己从来没有在 tomcat 中配置过持久化管理器。
猜你喜欢
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多