ClassNotFound/NoClassDefFoundErrorへの対応

事象説明

    JVMがクラスをロードしようとしたが見つからなかった場合に発生します。

状況の確認方法

    APログにjava.lang.ClassNotFoundExceptionもしくはjava.lang.NoClassDefFoundErrorのスタックトレースが出力されます。

採取資料

    イベントログ(アプリケーション、システム)・シスログ

    APログ: ${INSTANCE_ROOT}/logs/tpsystem/<アプリケーショングループ名>/<プロセスグループ名>/save/<プロセスグループ名>.<数字>.<PID>.log

    システムトレース: ${INSTANCE_ROOT}/logs/tpsystem/<アプリケーショングループ名>/<プロセスグループ名>/save/<プロセスグループ名>_sys.<数字>.<PID>.log

    ${INSTANCE_ROOT}/config/tpsystem/history.act (sav)

    ${INSTANCE_ROOT}/config/tpsystem/sysmsg.trc (sav)

    ${INSTANCE_ROOT}/logs/server.log

    ${INSTANCE_ROOT}/logs/webotx_agent.log

    ${INSTANCE_ROOT}/logs/tpsystem/webotx_tpmmgr.log

復旧方法

    本エラーの性質上、単に再起動を行っても同様の障害になる可能性が非常に高く、次に説明する対策を行う必要があるでしょう。

予防のための対策

    該当のクラスがjarファイルに含まれているかの確認

      JVMが出力するスタックトレースに、ロードしようとした該当クラスの名前が出力されます。jarコマンドを使用して、そのクラスが含まれるべきjarファイルに含まれているかどうかを確認してください。

    必要なjarファイルが配備されているかの確認

      該当クラスを含むjarファイルが配備されているかどうかを確認してください。

    使用する共有コンポーネントの確認

      共有コンポーネントを使用するためには、各サーバコンポーネントの設定で「使用する共有コンポーネント」を選択する必要があります。選択されていない共有コンポーネントは読み込まれません。各サーバコンポーネントで、使用すべき共有コンポーネントが選択されているかを確認してください。

    環境変数CLASSPATHの確認

      該当クラスがサーバコンポーネントでも共有コンポーネントでもないjarファイルに含まれる場合、そのjarファイルへのパスがCLASSPATHに間違いなく設定されているかどうかを確認してください。APログと同じディレクトリに生成されるファイル、<プロセスグループ名>_sys.<プロセスID>.logの「CLASSPATH=」で始まる行に環境変数CLASSPATHの値が出力されますので、その値で確認できます。

    クラスの参照関係の確認

      上記の確認でも改善しない場合、クラスの参照関係に問題がある可能性があります。 WebOTXでは独自のクラスローダの関係上、クラスの参照関係には制限があります。 詳細は 「注意制限事項」 →「13 TPモニタ」 →「 13.11. Javaのクラスロードについて」 を参照してください。制限に該当する場合、APの再設計、jarの再構成が必要になる場合があります。


関連情報

    Javaのクラスロードについて

    トラブルシューティング(障害解析)