`

tomcat启动时出现异常Exception loading sessions from persistent storage分析: session未超时的情况下,服务器关闭的时候会被序列化为工程名\

 
阅读更多

Exception loading sessions from persistent storage
Java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2228)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2694)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:761)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:277)
at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:56)
at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:384)
at org.apache.catalina.session.StandardManager.load(StandardManager.java:343)
at org.apache.catalina.session.StandardManager.start(StandardManager.java:657)
at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:499)
at org.apache.catalina.startup.ContextConfig.managerConfig(ContextConfig.java:315)
at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:635)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:216)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4290)

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)

~~~~~~~~~~~~~~~~~

 

 

分析: session未超时的情况下,服务器关闭的时候会被序列化为工程名\SESSIONS.ser,tomcat 启动的时候再加载进来,EOFException表示tomcat上次关闭时还有一些活动连接,所以在重启时tomcat尝试去恢复这些session,但是在输入过程中意外地到达文件尾或流尾的信号,导致从session中获取数据失败。异常是tomcat本身的问题,由于tomcat上次非正常关闭时有一些活动session被持 久化(表现为一些临时文件),在重启时,tomcat尝试去恢复这些session的持久化数据但又读取失败造成的。此异常不影响系统的使用。

解决办法:将 tomcat_home\work\Catalina\localhost\『工程名』\SESSIONS.ser删除。如果正常关闭服务端,该文件是自 动删除的。考虑到每个人的tomat的工作目录不同,建议在“搜索”功能中找到你的SESSIONS.ser文件,而且只需要删 除..\yourProjectName\下的SESSIONS.ser即可。

最简单的办法是work下的全部删除,然后重启tomcat。

 

下面是有关tomcat 的work目录的知识:

1 用tomcat作web服务器的时候,部署的程序在webApps下,这些程序都是编译后的程序(发布到tomcat的项目里含的类,会被编译成.class后才发布过来,源文件没有发布过来,但这里的jsp没有经编译的)。tomcat有一个work目录,里面存放了页面的缓存,访问的jsp都会编译(从work里进入Catalina后的如localhost站点文件夹下的项目,我们可以看到那些jsp 页面会被编译成应该是servlet文件,下次再来访问时,就直接运行servlet类就可以向客户端反应响应页面了,所以有的博客说第一次访问时会比较 慢,是因为新发布上去的页面在第一个人访问时,会先编译成servlet文件,所以慢了,一旦编译好,那么除非jsp页面修改,不然下次访问直接运行 servlet就可以响应用户,所以快),编译后的文件都会存储在work目录下。而tomcat显示的目录,都会从这个缓存里找编译后的jsp对应的class文件。所以当清空了work目录后,该过程将会从新来过。
有的时候会遇到一个问题,就是修改后的页面在tomcat运行的时候显示不了修改后的痕迹。这个时候删除work目录下对应的项目文件夹,重新启动tomcat就可以了。

2 在tomcat的conf配置文件夹下的server.xml文件里配置了Host name后,就会在conf下的Catalina文件夹和work下的Catalina文件下建立站点名称的文件夹,项目每次发布都会放入来,也会记录到conf下的Catalina文件夹的配置文件里去。

 

from:http://getspring.blog.163.com/blog/static/115300609201073010022281/

 

分享到:
评论

相关推荐

    [Timeline Sec] - CVE-2020-9484:Tomcat Session 反序列化复现1

    当Tomcat配置使用`org.apache.catalina.session.PersistentManager`作为会话管理器,并且选择`org.apache.catalina.session.FileStore`存储会话数据时,攻击者可以通过LFI漏洞读取服务器上任何以`.session`为扩展名...

    Tomcat8(Tomcat9)+redis实现Session共享(支持Redis集群)

    这个解决方案的优势在于,当你的Web应用部署在多台Tomcat服务器上时,每台服务器都能访问到同一份Session数据,从而实现了Session的跨服务器共享。此外,Redis的高并发性能和持久化能力也能保障在高负载下的服务稳定...

    Tomcat_Session的持久化

    当 Tomcat 服务器关闭或重启,或者 Web 应用被重新加载时,会对在内存中的 HttpSession 对象进行持久化,把它们保存到文件系统中,默认的文件为:&lt;CATALINA_HOME&gt;/work/Catalina/hostname/applicationname/SESSIONS....

    tomcat8集群实现session共享,内含session共享包

    在IT行业中,尤其是在Web服务器领域,Tomcat是一个广泛使用的开源应用服务器,特别是对于Java Servlet和JavaServer Pages(JSP)的应用。在这个场景中,我们关注的是如何在Tomcat集群环境中实现Session共享,以便...

    tomcat集群session共享解决方案

    当session在某台服务器上创建或更新时,会写入到共享存储中,其他服务器可以通过查询共享存储获取session。这种方法降低了网络负担,但增加了对外部服务的依赖,并可能带来额外的延迟。 3. **基于粘滞会话(Sticky ...

    tomcat8专用session管理包.rar

    标题中的“tomcat8专用session管理包.rar”指的是一个针对Tomcat 8的特定session管理解决方案,这个压缩包包含了在使用Nginx作为反向代理服务器,并与Redis结合实现负载均衡场景下,确保Tomcat应用间session数据共享...

    tomcat-session-manager环境构建资源

    标题“tomcat-session-manager环境构建资源”涉及到的是在IT领域中如何配置和管理Tomcat服务器的会话(Session)管理,特别是在一个高可用性(HA)的集群环境中。在这个场景中,Nginx通常作为反向代理服务器,而...

    tomcat的session共享所需jar包

    在Java Web开发中,Tomcat作为一款广泛应用的开源Servlet容器,常常被用来部署Java应用程序。在多服务器环境或集群配置中,实现用户session的共享是一个关键问题,这有助于确保用户在不同服务器之间切换时,其登录...

    tomcat8 session 共享

    当Session被修改时,更改会广播到集群中的所有其他服务器。这种方法实时性强,但随着用户增加,内存消耗会显著增加。 3. **基于数据库的Session存储**:Session数据存储在数据库中,每次Session变更都会更新数据库...

    springsession管理多台tomcatsession

    尤其在处理多台 Tomcat 服务器时,SpringSession 提供了一种优雅的方式来实现 session 共享,避免了传统的 sticky sessions 或者基于 cookie 的解决方案的局限性。在本场景中,我们将讨论如何利用 SpringSession 将 ...

    tomcat-session同步所需jar.rar_session集群共享_tomcat session

    在IT行业中,尤其是在Java Web应用领域,Tomcat服务器的session管理是至关重要的。"tomcat-session同步所需jar.rar_session集群共享_tomcat session"这个标题表明我们关注的是如何在Tomcat集群环境中实现session的...

    resis实现tomcat7 session 共享

    在多台Tomcat服务器集群的情况下,Session共享是一个重要的需求,以便用户在不同服务器之间切换时,仍然能够保持登录状态和其他会话数据。 【描述】虽然描述部分为空,但我们可以通过常规理解来推测,这篇博文可能...

    Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    在单体服务器环境下,Session存储在服务器内存中,但在集群环境中,由于请求可能被分配到不同的服务器节点,因此需要一种方法来共享这些Session信息。 这就是Redis的角色所在。Redis是一个高性能的键值存储系统,它...

    java session

    根据提供的部分内容,在运行Tomcat下的SSH项目时,可能会遇到以下问题: 1. **启动和停止过程中的异常** 当停止Tomcat服务器时,如果设置了Session数据的持久化,则会尝试将当前活跃的Session数据保存到磁盘上。...

    用Redis存储Tomcat集群的Session

    - **配置Nginx**:Nginx作为负载均衡器,根据策略将请求分发到不同的Tomcat实例,同时可以配置Session粘滞(sticky sessions),确保同一用户的所有请求被发送到同一台服务器,减少不必要的Session从Redis中读取。...

    Nginx 集群 tomcat session 共享配置有源码

    在构建高可用的Web服务时,Nginx作为反向代理服务器和负载均衡器,常常与Tomcat这样的Java应用服务器配合使用。然而,当多个Tomcat实例构成集群时,会面临一个问题:用户session的共享。Session是Web应用程序用来...

    reids+tomcat8.5+tengine实现session相关jar包.zip

    在分布式架构中,Tengine可以作为负载均衡器,通过特定的配置实现Session黏滞(Sticky Sessions),确保用户的请求始终被转发到保存其Session的服务器上。 4. **Session共享原理**:通过在Tomcat中集成一个session...

    Tomcat集群Session共享所有文件.zip

    这是因为默认情况下,每个Tomcat实例都有自己的Session存储,如果用户请求被转发到不同的服务器,原有的Session信息就会丢失。为了解决这个问题,有多种策略可以实现Session的集群共享: 1. **粘性会话(Sticky ...

    tomcat session共享负载

    在单个服务器环境下,Session管理相对简单,但在多服务器的集群中,如果每个服务器都独立维护Session,会导致数据不一致和用户体验下降。 Tomcat提供了以下几种Session共享策略: 1. **粘滞会话(Sticky Sessions...

    【全套】tomcat集群Session共享

    总的来说,“【全套】tomcat集群Session共享”这套资源包含了实现Tomcat集群Session共享所需的全部工具和说明文档,能够帮助开发者有效地解决多实例Tomcat下的Session一致性问题,提升系统的可扩展性和可用性。...

Global site tag (gtag.js) - Google Analytics