tomcat啟動時出現異常Exception loading sessions from persistent storage

來源:互聯網
上載者:User

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) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595) 
at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277) 
at org.apache.catalina.core.StandardHost.install(StandardHost.java:832) 
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:701) 
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432) 
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:983) 
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349) 
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:789) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478) 
at org.apache.catalina.core.StandardService.start(StandardService.java:480) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:556) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425) 

分析: 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/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.