我在执行kill -9后试图理解tomcat的(版本8.0.21)会话持久性。当我启动我的tomcat(使用startup.sh)时,我观察(随机)我的web应用程序的http会话(在kill命令执行之前创建)仍在维护。 我理解这个会话在重启时的持久性,如果我执行shutdown.sh来停止tomcat然后再次启动tomcat。我对kill -9的理解与“断电”类似。所以我的问题是:
答案 0 :(得分:1)
Tomcat session manager documentation对此话题有很多话要说。这里有一些相关的宝石:
Tomcat提供了两种标准的Manager实现 - 默认实现了活动会话,而可选的一个存储了已经换出的活动会话(除了在重启Tomcat时保存会话)。
...
每当Apache Tomcat正常关闭并重启,或触发应用程序重新加载时,标准的Manager实现将尝试序列化所有当前活动的会话......
强调我的 - 我认为重要的是要注意当你重新加载应用程序时活动会话被序列化。如果您最近重新加载了应用程序,然后执行kill -9
(正如评论中正确指出的那样,Tomcat没有任何警告,也没有时间清理任何内容,因此只能作为不得已),那么你确实会看到会在重启过程中持续存在。
您也可以配置持久性存储管理器:
除了创建和删除会话的常规操作之外,
PersistentManager
还能够将活动(但空闲)会话交换到持久存储机制,以及在正常重启期间保存所有会话汤姆猫。
虽然我会说除非你做了这个配置,或者这个Tomcat的安装是为你预先配置的,但事实并非如此。