Excat for Javaチュートリアル-3.4 ダンプファイルの解析

本節では、「障害情報分析ツール(ErrorAnalyzer)」を利用し、取得したダンプファイルを解析する手順について説明します。

解析手順

取得したダンプファイルの解析は以下の手順にて行います。
今回は、複数のダンプファイルが出力されていますので、複数のダンプファイルを参照するために便利なダンプファイル・ビューアを使って、ダンプファイルの解析を行っていきます。

  1. ダンプファイル・ビューアの設定
  2. ソースフォルダの設定
  3. 障害時のデータ状況を確認
  4. 特定メソッド通過時のデータ状況を確認

(1)ダンプファイル・ビューアの設定

ダンプファイルをダンプファイル・ビューアにて参照するための設定を行います。

メニューから「設定」-「設定」をクリックする

ダンプファイルの解析12

「ダンプファイルビューワ」タブをクリックする

ダンプファイルの解析13

「追加」ボタンをクリックする
「名前」に設定するルートディレクトリに表示する登録名を入力する

本チュートリアルでは、「log」を指定します。

「ルートパス」にダンプファイル・ビューアに表示する、ルートディレクトリを設定する

本チュートリアルでは、「C:\excat\log」を指定します。

ダンプファイルの解析14

「確定」ボタンをクリックする

以上で設定は終わりです。ダンプファイル・ビューアに、設定したディレクトリ配下の ダンプファイルが以下のように、表示されていることを確認してください。

ダンプファイルの解析15

備考

ダンプファイル・ビューアは、ルートディレクトリを複数指定可能です。

複数のシステムの障害解析を行う場合にはシステム単位でルートディレクトリを設定することで、 システム単位のダンプファイルを分けて表示することができます。

(2)ソースフォルダの設定

ソースフォルダを以下の通り設定します。設定手順は、「 2.スタンドアローンでExcat for Javaを使ってみよう 2.4 ダンプファイルの解析 (1)ソースフォルダの設定」を参照してください。

ソースファイル&フォルダ <ワークスペース>/Sample2/src

(3)障害時のデータ状況を確認

発生した「SQLException」例外の原因を解析していきます。

補足

本アプリケーションでは、例外発生時に以下のようなエラー情報をログに出力しているため、エラーメッセージを見ればどのようなエラーが発生したかはある程度分かるようになっています。

[2008/08/31 23:59:54][ERROR][RequestProcessorEx] javax.servlet.ServletException: SqlMapClient operation; SQL [];
--- The error occurred in sqlMap.xml.
--- The error occurred while applying a parameter map.
--- Check the insertClient-InlineParameterMap.
--- Check the statement (update failed).
--- Cause: java.sql.SQLException: Violation of unique constraint SYS_PK_47: 
duplicate value(s) for column(s) CLIENTID in statement [ INSERT INTO 
CLIENT(CLIENTID,CLIENTNAME) VALUES(?,?);]; nested exception
 is com.ibatis.common.jdbc.exception.NestedSQLException:
・・・以下省略。

今回の例では「java.sql.SQLException: Violation of unique constraint SYS_PK_47」とログに出力されているので、一意制約に違反したために例外が発生したということが読み取れます。
そこで、どういった値で一意制約に違反したのかを、ダンプファイルから解析していきます。

ダンプファイル・ビューアからダンプファイルを開く

「log[C:\excat\log]」-「<ダンプファイル取得日付>」-「java_sql_SQLException」-「tutorial_(PC名)_1_(JVMバージョン)_(実行時刻)_005.dat」をダブルクリックする

ダンプファイルの解析16

スタック・ビューアに表示されたツリーを展開し、障害が発生した時の状況を確認する。

"com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate"のノードを展開すると、発行したSQL文とパラメータを確認することができます。

ダンプファイルの解析17

このことから、障害発生時に発行したSQL文のCLIENTIDが"000001",CLIENTNAMEが"サンプル"であり、
このパラメータが一意制約に違反したということが解析できます。

(4)特定メソッド通過時のデータ状況を確認

今回は、「 3.WebアプリケーションでExcat for Javaを使ってみよう 3.2設定ファイルの作成 (3)監視タスク」
でメソッド監視の設定もしておいたので、 "jp.co.ipride.excat.sample.blogic.InputBLogic"のexecuteメソッド通過時の状況も確認しておきます。

ダンプファイル・ビューアからダンプファイルを開く

「log[C:\excat\log]」-「<ダンプファイル取得日付>」-「jp_co_ipride_excat_sample_blogic_InputBLogic」-「execute」-「tutorial_(PC名)_1_(JVMバージョン)_(実行時刻)_001.dat」をダブルクリックする

ダンプファイルの解析18

スタック・ビューアに表示されたツリーを展開し、メソッド通過時の状況を確認する。

"jp.co.ipride.excat.sample.blogic.InputBLogic.execute"のノードを展開すると、メソッド通過時の引数を確認することができます。
executeメソッドに渡された"jp.co.ipride.excat.sample.vo.Input"の内容を以下のように確認します。
この機能を用いることで、業務的なエラーが発生した場合に、どの値がどこから渡ってきたのかなどの解析に役立ちます。

ダンプファイルの解析19

チュートリアルトップへ