杀死-9 <pid>后Tomcat 8会话持久化

时间:2015-08-06 12:19:22

标签: java session tomcat kill-process

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

  1. 是否在kill -9之后调用标准管理器实现,它试图在终止之前保持会话。
  2. 或者我只是得到了上一个会话,因为我的tomcat可能已经序列化了几个会话,(在某个地方进入了它的临时目录),而它早于(在执行kill -9之前)。

1 个答案:

答案 0 :(得分:1)

Tomcat session manager documentation对此话题有很多话要说。这里有一些相关的宝石:

  

Tomcat提供了两种标准的Manager实现 - 默认实现了活动会话,而可选的一个存储了已经换出的活动会话(除了在重启Tomcat时保存会话)。

     

...

     

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

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

您也可以配置持久性存储管理器:

  

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

虽然我会说除非你做了这个配置,或者这个Tomcat的安装是为你预先配置的,但事实并非如此。