トランザクションのエンドポイント設定
トランザクションエンドポイントは、トランザクションの開始メソッドです。HTTPトランザクションの場合は、HttpServlet.service()
またはFilter.doFilter()
がトランザクションの開始点であり、トランザクションエンドポイントと呼びます。
NON HTTP追跡
トランザクションエンドポイントとして指定されたメソッドが開始されて終了するまでのパフォーマンスをトランザクションパフォーマンスと呼びます。Non HTTPトランザクションを追跡するには、エンドポイントを指定する必要があります。
エンドポイント検索
- トランザクションが呼び出されると推定されるすべてのメソッドのトレース追跡を設定してください。
- 再起動後、トランザクションを発生させてモニタリングしてください。
back stack
オプションをオンにして、入力メソッドを正しく理解してください。
対象選択
-
メソッドトレース設定
メソッドトレースを設定します。トランザクションで呼び出されるクラスを指定してください。DBを使用するプログラムでは、JDBCドライバーが便利です。
whatap.confhook_method_patterns=jdbc.*.*
hook_method_access_public_enabled=true
hook_method_access_protected_enabled=true
hook_method_access_none_enabled=true -
トランザクション開始オプションの設定
メソッドが呼び出されたら、トランザクションを開始します。トランザクション開始オプションとトランザクション開始時にスタックをダンプするオプションをオンにします。
whatap.conftrace_auto_transaction_enabled=true
trace_auto_transaction_backstack_enabled=true -
再起動後のトレース分析
再起動してください。あとからサービスを呼び出すと、トランザクションが追跡されていることがわかります。
トランザクションを検索すると、
jdbc.*
で始まるすべてのクラスのメソッドがこのトランザクションで表示されることがわかります。トランザクショントレースを検索すると、TRANSACTION BACKSTACKというメッセージステップが表示されます。TRANSACTION BACKSTACKjdbc.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) -
スタックの内容を確認
スタックの内容を確認することで、どのメソッドから開始するかを推定できます。
Examplecom.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エンドポイントの最も**重要な基準は終了機能です。**通常の状態では、遅延することなく直ぐに終了する必要があり、パフォーマンスの判断ができます。
トランザクションのエンドポイント指定
-
トランザクションの開始点を次のように設定します。
whatap.confhook_service_patterns=com.virtual.web.SimulaNonHttp.process
-
アプリケーションを再起動してください。
process()
メソッドは、新しいトランザクションのエンドポイントになります。
hook_service_patterns
オプションではワイルドカード文字を使用できません。2つ以上の値を設定するにはコンマ(,)を区切り文字として利用してください。
トランザクション名の定義
一般的に、メソッド名でトランザクションを区別できます。
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
オプションに指定されたインデックスにパラメータをサービス名として使用します。
-
プラグイン使用
プラグインは、十分に理解している場合にのみ使用してください。
_WHATAP_HOME_経路の下位にpluginフォルダを作成し、pluginへ移動します。vi
コマンドでAppServiceStart.xファイルを作成します。
println("test");
と入力して保存すると、画面に、"test"という文字列が出力されます。確認後、パラメータから情報を抽出してください。
次の例ではHashMap
この引数で渡され、このHashMap
には'url'というキーが含まれています。
Object url =((java.util.HashMap)$point.getArgs()[0]).get("url");
$ctx.service((String)url);
//println("url="+url);
このようにプラグインを作成すると、トランザクション名が変更できます。