クマの手も借りたい
馬とテニスとリラックマが好きな IT 系のエンジニアです。
Java

Tomcat停止時にSESSIONS.serが見つからないエラーが発生した時の対応方法

突然 Tomcat の catalina.out にエラーが出力され始めたので調査しました。

どうやら、エラーになっているのは AXIS2 の Web アプリ。

Tomcat 停止時に SESSIONS.ser が見つからないと言っています。

今まで意識してませんでしたが、通常は work ディレクトリに作成されるようです。

この辺は、Tomcat の仕組みを理解しないといけないところですね。

SESSIONS.serの生成と破棄タイミング

SESSIONS.ser 自体は、Tomcat 停止時(stop)に作成されて、Tomcat 起動時(start)に削除されるようです。

最近やったことと言えば、ajp を使って Apache をフロントに使ったことだけですが、これと関係あるのかはまだわかりません。
(切り分けのためには Tomcat 単体での動作に戻してみる必要があります)

海外のサイトにこれと同じエラーについて論議されたスレッドがあるので、まずはそっちで手掛かりを掴んでみたいと思います。
(ただ、このサイト重い・・・)

エラーの詳細

以下は実際に出力されたエラーになります。

Tomcat のルートディレクトリは公開できないので下記では ${CATALINA_HOME} に書き換えています。

各アプリケーションのバージョンは、Tomcat が 5.5.25、Apache は 2.2.3 です。

[ERROR] 持続されたセッションの保存中のIOExceptionです: java.io.FileNotFoundException: ${CATALINA_HOME}/work/Catalina/localhost/axis2/SESSIONS.ser (No such file or directory)
java.io.FileNotFoundException: ${CATALINA_HOME}/work/Catalina/localhost/axis2/SESSIONS.ser (No such file or directory)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
        at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:489)
        at org.apache.catalina.session.StandardManager.unload(StandardManager.java:463)
        at org.apache.catalina.session.StandardManager.stop(StandardManager.java:667)
        at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4360)
        at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:893)
        at org.apache.catalina.startup.HostConfig.undeployApps(HostConfig.java:1180)
        at org.apache.catalina.startup.HostConfig.stop(HostConfig.java:1151)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:313)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
        at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1055)
        at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1067)
        at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:448)
        at org.apache.catalina.core.StandardService.stop(StandardService.java:510)
        at org.apache.catalina.core.StandardServer.stop(StandardServer.java:734)
        at org.apache.catalina.startup.Catalina.stop(Catalina.java:602)
        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.stop(Bootstrap.java:307)
        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.commons.daemon.support.DaemonLoader.stop(DaemonLoader.java:200)
[ERROR] 永続記憶装置にセッションをアンロード中の例外です
java.io.FileNotFoundException: ${CATALINA_HOME}/work/Catalina/localhost/axis2/SESSIONS.ser (No such file or directory)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
        at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:489)
        at org.apache.catalina.session.StandardManager.unload(StandardManager.java:463)
        at org.apache.catalina.session.StandardManager.stop(StandardManager.java:667)
        at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4360)
        at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:893)
        at org.apache.catalina.startup.HostConfig.undeployApps(HostConfig.java:1180)
        at org.apache.catalina.startup.HostConfig.stop(HostConfig.java:1151)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:313)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
        at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1055)
        at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1067)
        at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:448)
        at org.apache.catalina.core.StandardService.stop(StandardService.java:510)
        at org.apache.catalina.core.StandardServer.stop(StandardServer.java:734)
        at org.apache.catalina.startup.Catalina.stop(Catalina.java:602)
        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.stop(Bootstrap.java:307)
        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.commons.daemon.support.DaemonLoader.stop(DaemonLoader.java:200)

エラーの原因と対応

少しずつ原因を切り分けながら進めていったところ、AXIS2-1.3 から AXIS2-1.2 に戻したら現象が出なくなりました。

ちなみに、現在の work ディレクトリ配下は以下の通り。

$ ls -l ${CATALINA_HOME}/work/Catalina/localhost/axis2/

axis218639addressing-1.2.mar
axis218640soapmonitor-1.2.mar
axis218641XXXXX.aar
axis218642XXXXX.aar
tldCache.ser

やはり、Tomcat とアプリケーションの組み合わせで発生していたようです。

現在はフロントの Apache からは ajp は使っていませんが、ajp に切り替えてみてそのパターンも見ておこうと思います。

ちなみに現在は ProxtPass で Tomcat の 8080 に直接リクエストを委譲しています。

Web API The Good Parts

オライリーの「Web API」に特化した本です。最近の多くの Web サービスは API が活用されていますが、その技術はこれまでの Web サイトとそれほど大きく変わりません。

今後、マイクロサービス化が進む中で知っておいて損はない内容が詰め込まれており、現場のエンジニアやこれから Web 系のエンジニアを目指す人にもオススメの一冊です。

created by Rinker
¥2,376
(2018/09/21 11:58:20時点 Amazon調べ-詳細)

あなたにオススメ