アクティブトランザクション
進行中のトランザクションをアクティブトランザクションと呼びます。アクティブトランザクションで定期的にダンプされるスタックはアクティブスタックと呼ばれます。
WhaTapエージェントは、10秒(オプションで調整可能)ごとにアクティブトランザクションに対して、アクティブスタックをダンプし、サーバーに送信します。active_stack_second=10
コンパクトなアクティブスタックの収集
アクティブスタックはスレッドダンプを定期的に実行するため、誤った実装をするとエージェントのオーバーヘッドが増加する可能性があります。WhaTapはエージェント負荷を最小限に抑えながらアクティブスタックを収集するために、様々なオプションがあります。
インスタンス性能管理 > スレッドリスト/ダンプメニューのスレッドリストでWhaTap-ActiveStackDumpスレッドのCPU時間を確認し、オーバーヘッドを判断できます。
アクティブスタックの例
java.lang.StringBuffer.append(StringBuffer.java:309)
java.util.regex.Matcher.appendReplacement(Matcher.java:839)
java.util.regex.Matcher.replaceAll(Matcher.java:906)
java.lang.String.replaceAll(String.java:2162)
core.log.triggers.TriggerRegister.changeNotify(TriggerRegister.java:114)
core.log.aop.handler.DaoInfo.log(DaoInfo.java:141)
core.log.aop.handler.DaoInfo.doAround(DaoInfo.java:102)
core.log.aop.reflection.profiler.AroundProfiler.invoke(AroundProfiler.java:19)
com.sun.proxy.$Proxy39.getUpdateCount(Unknown Source)
org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getNextResultSet(DefaultResultSetHandler.java:256)
org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:193)
org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)
* * *
sun.reflect.GeneratedMethodAccessor140.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
最適化されたデータ収集
-
トランザクションを実行しているスレッドに対して、スタックをダンプします。
-
アクティブスタックダンプの時間間隔を調整できます。
whatap.confactive_stack_second=10
-
アクティブスタックの最大行に制限されます。トップラインから基本の50行を収集します。
whatap.conftrace_active_callstack_depth=50
-
アクティブスタックの各行をハッシュ処理して収集します。テキストは1度だけ収集します。
-
一度に収集される最大のアクティブスタックの数も制限されます。
whatap.confactive_stack_count=100
Background Threadのアクティブスタック
基本的にアクティブスタックは、トランザクションが実行されているスレッドのスタックを意味します。ただし、一部のバックグラウンドスレッドのスタックも分析が必要な場合があります。この場合、オプションを通じてバックグラウンドスレッドに対するアクティブスタックが取得できます。この機能はJavaエージェント1.6.2バージョン以降からサポートします。
-
async_stack_enabled
の値をtrue
に設定すると活性化されます。whatap.confasync_stack_enabled=false
-
スタックダンプの間隔は、フォアグラウンドアクティブスタックの設定に準じます。
whatap.confactive_stack_second=10
-
対象スレッド名を指定する場合は、
*
を使用して文字列パターンを指定します。whatap.confasync_thread_match=http*,abc*
スレッド名でスタックダンプの対象を識別します。コンマ(,)を区切り文字として使用してmatchを複数指定できます。
-
スタックの上位メソッドが
async_thread_parking
に登録されたクラスまたはメソッドの場合、スレッドがパーキング状態にあると判断してダンプを生成しません。whatap.confasync_thread_parking_class=sun.misc.Unsafe
async_thread_parking_method=park