2.5.6 JPAアプリケーションでトラブルが発生した場合

JPAを使用したアプリケーションでトラブルが発生した場合の解析手順について説明します。

ここでは,代表的な障害の例とその場合の障害原因の解析手順を説明します。

なお,CJPAプロバイダが出力する各ログ間の情報は,時刻,スレッドID/プロセスID,およびPersistenceUnit名を基にして対応づけます。取得したログでの原因の特定ができない場合で,再現性があるときには,ログレベルを上げて資料を取得してください。

<この項の構成>
(1) ユーザアプリケーションでの例外発生
(2) 性能面での障害発生
(3) トラブルシューティングで使用する資料

(1) ユーザアプリケーションでの例外発生

ユーザアプリケーションで例外が発生した場合のユーザが実施する解析手順を説明します。例外が発生するタイミングは,アプリケーションの起動時(デプロイを含む)またはアプリケーションの実行時が考えられます。それぞれのタイミングで例外が発生したときの解析手順について説明します。

●アプリケーション起動時の例外発生

アプリケーションの起動時に例外が発生した場合の解析手順を次に示します。

  1. メッセージログを確認する。
    メッセージログに出力されたメッセージを参照します。メッセージマニュアルを参照して,出力されたメッセージIDの対処方法を確認します。また,対策を検討します。
  2. アプリケーションの定義を確認する。
    メッセージログの内容に従って,アプリケーション内のアノテーションの定義情報,persistence.xml,O/Rマッピングファイルの設定内容を見直し,設定内容に問題がないかどうかを確認してください。設定内容の確認で原因が判明しない場合,出力されたメッセージの対処方法が保守員連絡となっている場合は,保守員に連絡してください。
●アプリケーション実行時の例外発生

アプリケーション実行時に例外が発生した場合の解析手順を次に示します。

  1. メッセージログを確認する。
    メッセージログに出力されたメッセージから障害の事象を確認します。メッセージについては,マニュアル「アプリケーションサーバ メッセージ(構築/運用/開発用)」を参照してください。
  2. 例外ログを確認する。
    例外ログに出力されたスタックトレースから,例外が発生した個所を特定します。例外が発生した原因がアプリケーションの処理内容に問題があるかどうかを確認します。アプリケーションの処理に問題がある場合は,アプリケーションを修正してください。
    メッセージログの対処方法が保守員連絡になっている場合,アプリケーションの処理に問題がない場合などの原因が判明しないときには,保守員に連絡してください。

(2) 性能面での障害発生

特定の処理に時間が掛かっているなど,性能面で障害が発生した場合の解析手順を説明します。性能面で問題が発生するタイミングは,アプリケーション起動時またはアプリケーションの実行時が考えられます。

アプリケーションの起動時に性能面で問題がある場合には,保守員に連絡してください。アプリケーションの実行時に性能面で問題がある場合には,次に示す手順で問題の個所を特定してください。

  1. PRFトレースを確認する。
    PRFトレースの内容から処理に時間が掛かっている個所を特定します。ユーザ実装個所とCJPAプロバイダのどちらに障害の原因があるかを特定します。ユーザ実装個所に問題がある場合にはアプリケーションを修正するなどの対処を実施してください。CJPAプロバイダの内部処理で処理に時間が掛かっている場合には保守員に連絡してください。
  2. 稼働ログを確認する。
    発行したSQLを確認したい場合には,稼働ログを確認します。
    例えば,次に示す場合などに該当するかどうかは,発行しているSQLを参照することで確認できます。
    • 継承戦略にJOINEDを利用したため,エンティティの読み込みでJOIN操作が多発している。
    • コレクションで管理しているエンティティを操作したため,その延長で各要素に対してSELECTが発生している。

なお,CJPAプロバイダで出力される稼働ログについては,「付録C.1 CJPAプロバイダの稼働ログ」を参照してください。

(3) トラブルシューティングで使用する資料

システムで障害が発生した場合,CJPAプロバイダで必要とするトラブルシューティングの資料と資料の取得元を次の表に示します。

表2-15 CJPAプロバイダで必要とするトラブルシューティングの資料と資料の取得元

トラブルシューティング資料取得元資料のファイル名称
メッセージログsnapshot(1次)メッセージログ
例外ログsnapshot(1次)障害発生時の例外情報
CJPAプロバイダの稼働ログsnapshot(1次)CJPAの稼働ログ
J2EEサーバの定義情報snapshot(1次)
  • J2EEサーバ用オプション定義ファイル
  • J2EEサーバ用ユーザプロパティファイル
  • J2EEサーバ用セキュリティポリシーファイル
J2EEサーバの作業ディレクトリに含まれるアプリケーションの定義情報persistence.xmlsnapshot(2次)
  • EJBサーバ作業ディレクトリの内容
  • Webコンテナ作業ディレクトリの内容
O/Rマッピングファイル
EJB,WARの属性ファイル
DB ConnectorのConnector属性ファイルsnapshot(2次)Webコンテナ作業ディレクトリの内容
DB Connectorのログsnapshot(1次)J2EEリソースアダプタとしてデプロイして使用するリソースアダプタの稼働ログ
性能解析トレースsnapshot(1次)PRFデーモンおよびPRFコマンドのログ
J2EEサーバのスレッドダンプスレッドダンプ取得コマンド
接続するデータベースのSQLトレース
(ただし,トレース情報を採取している場合だけ)
  • HiRDBの場合
    SQLトレース
マニュアル「HiRDB SQLリファレンス」を参照してください。
  • Oracleの場合
    SQLトレースinit.oraでsql_trace=trueと設定時に取得されるトレースファイル
Oracleのマニュアルを参照してください。