本文へスキップ

トランザクション

ノート

トランザクションの詳細については、次の文書を参照してください。例として、ヒットマップを使用したトランザクション分析のガイドについては、サブメニューである次の文書を参照してください。

トランザクショントレーシング

トランザクション性能とは、トランザクションの開始と終了までの要約指標や属性を意味します。一方、トランザクショントレースは、トランザクションが実行されているステップのトレースです。トランザクションが遅い場合やエラーが発生した場合は、その原因を追跡するために実行履歴をステップごとに追跡する必要があります。これをトランザクショントレーシングと呼ばれます。

WhaTapが収集するステップの種類は、大きく分けてSQLステップ、HTTP CALLステップ、メッセージステップ、SOCKETオープンステップ、DB接続ステップ、メソッドステップなどがあります。

ノート

WhaTapのステップ(Step)は、スパン(Span)と同じ意味で使用します。


  • DB接続ステップ START-END

    RDBへの接続のパフォーマンスが含まれます。ステップ情報には、名前、応答時間、エラーが含まれます。

  • SQLステップ START-END

    JDBC SQLのパフォーマンスが含まれます。ステップ情報には接続情報、SQL文、エラーが含まれています。

  • HTTP Callステップ START-END

    外部HTTPサービス呼び出しのパフォーマンスが含まれます。ステップ情報にはurl、host、port、応答時間、エラーが含まれます。

  • Messageステップ ADD

    トレースを収集する過程で、非構造化のすべての間隔の履歴を収集する際にメッセージステップを使用します。

  • SOCKETステップ ADD

    Socketオープンを表現するステップです。

  • METHODステップ START-END

    メソッド応答時間を追跡します。

  • ACTIVE STACK ステップ START-END

    アクティブスタックに関する情報が含まれます。別のスレッドを作成し、トレースに追加することで収集されます。


  • profile_step_normal_count Int

    既定値 1000

    トランザクショントレースの基本ステップ数を指定します。

  • profile_step_heavy_count Int

    既定値1020

    トレースの基本ステップを超えた場合、最大heavyのステップ数を制限します。profile_step_normal_countprofile_step_heavy_timeを超えるステップをカウントします。レスポンス時間のないステップは収集されません。

  • profile_step_max_count Int

    既定値 1024

    トレースステップの最大数を設定します。収集されたトレースステップの数が設定値を超えると、その後に収集されるステップはすべて破棄されます。profile_step_heavy_countを最大1000に設定すると、profile_step_max_countまでアクティブスタックが収集されます。

  • profile_step_heavy_time MiliSecond

    既定値100

    Heavyステップの条件を指定します。指定された値より実行時間が長い場合は、profile_step_normal_countを超える場合でもprofile_step_heavy_count以内で記録されます。

  • profile_basetime MiliSecond

    既定値500

    トランザクションが設定値以下の時間内に終了した場合、トレース情報を収集しません。ただし、5分単位で最初に呼び出されたURL、エラーが発生したトランザクションに関するトレース情報は収集されます。

  • query_string_enabled Boolean

    既定値false

    トランザクションURLのクエリストリングをまとめて収集する機能を有効にします。

  • query_string_urls String

    トランザクションからクエリストリングを収集するURLを登録します。複数を登録する場合は、コンマ(,)を使います。

  • hook_method_patterns String

    特定メソッドの応答時間を測定する場合に使用します。[MODULE_NAME]:[CLASS_NAME].[FUNCTION_NAME]または[MODULE_NAME]:[FUNCTION_NAME]の形式で値を使用します。コンマ(,)区切り文字を使用して、複数のメソッドパターンを指定することができ、モジュールの全体クラスやクラスの全体モジュールは、asterisk(*)を使用して追跡できます。

    ノート

    モジュールの追跡はオーバーヘッドが発生する可能性があります。そのため、正しいモジュール名とメソッド名を使用してください。

  • trace_error_callstack_depth Int

    既定値50

    トランザクションからエラーコールスタックを収集する場合は、コールスタックの最大ライン数を指定します。このデータは、エラー統計データから表示できます。

  • trace_active_callstack_depth Int

    既定値50

    トランザクションからアクティブスタックを収集する場合は、コールスタックの最大ライン数を指定します。

  • trace_active_transaction_slow_time MiliSecond

    既定値 3000

    アクティブトランザクションのアークイコライザーからslow区間の応答基準を指定します。

  • trace_active_transaction_very_slow_time MiliSecond

    既定値 8000

    アクティブトランザクションのアークイコライザーからvery slow区間の応答基準を指定します。

  • trace_active_transaction_lost_time MiliSecond

    既定値300000

    トランザクションの終了を待機する制限時間です。5分以内にトランザクションが終了しない場合、トランザクション情報を収集しません。

HTTPトランザクションの追跡

  • profile_http_header_enabled Boolean

    既定値false

    トレースにHTTPヘッダーの情報を出力します。ヘッダー収集の有無に関係なく、ヘッダーをトレースに公開するための設定です。

  • profile_http_parameter_enabled Boolean

    既定値false

    トレース履歴にhttpパラメータ情報を記録する場合はtrueに設定してください。ただし、パラメータを表示するには、パラメータにセキュリティキーを入力する必要があります。セキュリティキーは、エージェントのインストールパスにあるparamkey.txtファイルに6桁で指定できます。paramkey.txtが存在しない場合は、自動生成され、randomキーが設定されます。

  • trace_normalize_enabled Boolean

    既定値 true

    トランザクションURLをパーシングおよび正規化する機能を有効にします。

    ノート

    値をfalseに変更すると、パスパラメータのパーシングが無効になります。 この場合、統計データの意味がなさないため、デバッグ目的で使用することをお勧めします。

  • trace_auto_normalize_enabled(*) Boolean

    既定値 true

    トランザクションURLを正規化すると、パターン値をアノテーションから抽出して自動的にパーシングする機能を有効にします。

  • trace_normalize_urls String

    トランザクションURLをパーシングして正規化します。呼び出しURLパターンをパーシングしてパスパラメータを削除します。

    ノート

    例)/a/{v}/bと宣言する場合、/a/123/b/a/{v}/bに置き換えます。複数を登録するにはコンマ(,)を使用します。/a/*/bで使用して、特定の形式のパスパラメータを削除して収集できます。

  • web_static_content_extensions(*) String

    既定値js, htm, html, gif, png, jpg, css, swf, ico

    スタティックコンテンツを判断する拡張子を指定します。ここで設定された拡張子を持つトランザクションは、トレース追跡とカウントが除外されます。

  • trace_ignore_url_set String

    トランザクション追跡から除外するURLを設定します。2つ以上の値を設定する場合は、コンマ(,)を区切り文字として使用します。

  • trace_ignore_url_prefix String

    トランザクション収集を除外するURL prefixを指定します。指定した値と一致するURLは、トランザクションのパフォーマンスを収集しません。

非HTTPトランザクションのトレース

  • トランザクションend-point

    トランザクションエンドポイントは、トランザクションの開始メソッドです。HTTPトランザクションの場合は、HttpServlet.service()またはFilter.doFilter()がトランザクションの開始点であり、トランザクションエンドポイントと呼びます。

  • NON HTTP追跡

    トランザクションエンドポイントとして指定されたメソッドが開始されて終了するまでのパフォーマンスをトランザクションパフォーマンスと呼びます。Non HTTPトランザクションを追跡するには、エンドポイントを指定する必要があります。

    ノート

    エンドポイント検索

    1. トランザクションが呼び出されると推定されるすべてのメソッドのトレース追跡を設定してください。
    2. 再起動後、トランザクションを発生させてモニタリングしてください。
    3. back stackオプションをオンにして、入力メソッドを正しく理解してください。

対象選択

  1. メソッドトレース設定

    メソッドトレースを設定します。トランザクションで呼び出されるクラスを指定してください。DBを使用するプログラムでは、JDBCドライバーが便利です。

    whatap.conf
    hook_method_patterns=jdbc.*.*
    hook_method_access_public_enabled=true
    hook_method_access_protected_enabled=true
    hook_method_access_none_enabled=true
  2. トランザクション開始オプションの設定

    メソッドが呼び出されたら、トランザクションを開始します。トランザクション開始オプションとトランザクション開始時にスタックをダンプするオプションをオンにします。

    whatap.conf
    trace_auto_transaction_enabled=true
    trace_auto_transaction_backstack_enabled=true
  3. 再起動後のトレース分析

    再起動してください。あとからサービスを呼び出すと、トランザクションが追跡されていることがわかります。

    トランザクションを検索すると、jdbc.*で始まるすべてのクラスのメソッドがこのトランザクションで表示されることがわかります。トランザクショントレースを検索すると、TRANSACTION BACKSTACKというメッセージステップが表示されます。

    TRANSACTION BACKSTACK
    jdbc.FakePreparedStatement.executeQuery(FakePreparedStatement.java),
    com.virtual.dao.SelectDAO.execute2(SelectDAO.java:29),
    com.virtual.web.SimulaNonHttp.execute(SimulaNonHttp.java:147),
    com.virtual.web.SimulaNonHttp.process(SimulaNonHttp.java:76),
    com.virtual.web.SimulaNonHttp.run(SimulaNonHttp.java:100)
  4. スタックの内容を確認

    スタックの内容を確認することで、どのメソッドから開始するかを推定できます。

    Example
    com.virtual.web.SimulaNonHttp.execute(SimulaNonHttp.java:147),
    com.virtual.web.SimulaNonHttp.process(SimulaNonHttp.java:76),
    com.virtual.web.SimulaNonHttp.run(SimulaNonHttp.java:100)

    上記の3つのメソッドのいずれかをトランザクションの開始点として判断できます。この状況では、逆コンパイルを実行して適切なトランザクションエンドポイントを決定する必要があります。

    ロジックを見ると、SimulaNonHtp.run内でwhile()が動作しながらSimulaNonHtp.process()を呼び出し、SimulaNonHtp.execute()が実行されます。process()が適当であることがわかります。この部分はソースを見て判断する必要があります。

    Tips

    エンドポイントの最も**重要な基準は終了機能です。**通常の状態では、遅延することなく直ぐに終了する必要があり、パフォーマンスの判断ができます。

トランザクションのEND POINT指定

  1. トランザクションの開始点を次のように設定します。

    whatap.conf
    hook_service_patterns=com.virtual.web.SimulaNonHttp.process
  2. アプリケーションを再起動してください。

process()メソッドは、新しいトランザクションのエンドポイントになります。

ノート

hook_service_patternsオプションではワイルドカード文字を使用できません。2つ以上の値を設定するにはコンマ(,)を区切り文字として利用してください。

トランザクション名の定義

一般的に、メソッド名でトランザクションを区別できます。

whatap.conf
service_name_mode=[full,class,method,string,arg]
service_name_index=0
  • service_name_mode

    full, class, method, string, argの5つのオプションを指定できます。

    • full: Full Class名をサービス名として使用します。

    • class: Class名をサービス名として使用します。

    • method:Method名をサービス名として使用します。

    • string:文字列の最初のパラメータをサービス名として使用します。

    • arg:パラメータでservice_name_indexオプションに指定されたインデックスにパラメータをサービス名として使用します。

マルチトランザクショントレース

  • mtrace_rate Percentage

    既定値0

    最初のトランザクションが発生したときに発行されるMTID(Multi Transaction ID)の発行率を設定するオプションです。MTIDを追跡することで、登録されているすべてのアプリケーション間の呼び出しを確認できます。同じプロジェクトに属するアプリケーションは、Caller&Callee機能によりトランザクショントレースを直接確認することができます。

  • mtrace_spec String

    既定値v1

    現在のインスタンスのアプリケーションバージョンを指定します。任意の文字列を指定できます。このデータは、呼び出し統計に使用されます。

  • mtrace_send_url_length Integer

    既定値80

    HTTP CallerはCalleeに自分のURLを渡します。この時、URLの長さを制限しています。この長さを指定します。