Versions Compared

    Key

    • This line was added.
    • This line was removed.
    • Formatting was changed.
    Comment: Published by Scroll Versions from this space and version 20.7-Nxt
    Sv translation
    languageen
    Appd tocbox
    Width370px

    Related pages:

    Introduction

    A pivotal part of the functionality of the Java agent is tracing activity within the JVM such that all the activity (both internal and external to the JVM) that results from servicing any given inbound request can be associated with the request itself. In simple cases, each request is processed by one Java thread, making it only necessary to track the processing of that single thread, in a pattern widely known as 'thread per request'.

    This was the predominant case for JEE applications prior to the introduction of version 3.0 of the servlet specification (introduced in Java EE 6). In systems where a significant amount of time is spent waiting for external resources, the thread per request model can be seen as inefficient since many application threads spend most of their lifetime blocked awaiting external responses.

    This observation motivated the asynchronous servlet capabilities provided as part of servlet 3 and also motivates many of the increasingly prevalent reactive frameworks that are in common usage (for example, Play, Akka, Vert.x and Spring Reactor). To correctly correlate transactions end to end in applications using this architectural approach, the agent must follow transactions from thread to thread to enable it to measure and link all the elements of work performed on behalf of each request, irrespective of which thread that work is executed on.

    The agent provides two mechanisms for thread tracking, known as 'Constructor Mode' and 'Executor Mode' (a new Experimental Feature added in Java agent release 4.5.11)

    The following pages describe these two alternative approaches to correlation of cross-thread transaction activity:

    • Constructor Mode Thread Tracing
      This is the mode that the agent has used for several years. It instruments Threads, Runnables and Callables based on their creation.

    • Executor Mode Thread Tracing (Experimental)
      This new experimental tracking mode is based on instrumenting executor frameworks which are commonly used by the majority of applications and frameworks. This mode is expected to make agent operation more efficient, especially in cases where heavy use of threading is in place, for example, in the presence of the above mentioned reactive frameworks.

    Choosing the Thread Correlation Mode

    The thread correlation mode used by the agent is selected using the async-instrumentation-strategy property within the app-agent-config.xml configuration file. To use the new (Experimental), executor-based instrumentation, modify app-agent-config.xml by changing the value async-instrumentation-strategy property from constructor to executor before starting the agent. You can also set the instrumentation strategy by setting the appdynamics.async.instrumentation.strategy system property on the JVM command line. For example: -Dappdynamics.async.instrumentation.strategy=executor

    The system property takes precedence over the configuration file. The thread instrumentation mode that is used cannot be changed at runtime. Threading behavior is tracked using Constructor Mode by default.

    Sv translation
    languageja
    Appd tocbox
    Width370px

    Related pages:

    概要

    Java エージェントの非常に重要な機能は、JVM 内のアクティビティを追跡することです。これにより、特定の着信要求を処理する結果として、すべてのアクティビティ(JVM の内部および外部の両方)をリクエスト自体に関連付けることができます。単純なケースでは、各リクエストは単一 Java スレッドによって処理され、その単一スレッドの処理を追跡する必要があるだけです。これは、「リクエストごとのスレッド」として広く知られているパターンです。これは、サーブレット仕様のバージョン 3.0(Java EE 6 で導入)が導入される前の JEE アプリケーションで主なケースでした。外部リソースの待機に大量の時間が費やされているシステムでは、多くのアプリケーションスレッドが外部応答待ちでブロックされたライフタイムのほとんどを消費するため、「リクエストごとのスレッド」モデルでは非効率的に見えることがあります。このような観察から、サーブレット 3 の一部として提供される非同期サーブレット機能が実現され、普及が進む一般的なリアクティブフレームワークの多く(Play、Akka、Vert.x、Spring Reactor など)が推進されています。このアーキテクチャアプローチを使用するアプリケーションでエージェントがトランザクションをエンドツーエンドで正しく関連付けるために、エージェントはスレッドからスレッドへトランザクションを追跡する必要があります。こうして、各リクエストの代わりに実行されるすべての作業エレメントについて、どのスレッドで実行されているかに関係なく、作業を測定してリンクできます。

    エージェントは、スレッドトラッキングのメカニズムとして、「Constructor モード」および「Executor モード」(Java エージェントリリース 4.5.11 で追加された新しい試験的機能)の 2 つを提供します。

    次のページでは、スレッド間トランザクション アクティビティを関連付けるこれら 2 つの代替アプローチについて説明します。

    • Constructor モードスレッドトレース
      これは、これまで数年間にわたってエージェントが使用してきたモードです。スレッド、Runnable、および Callable がそれぞれの作成に基づいてインストゥルメント化されます。

    • Executor モードスレッドトレース(試験的機能)
      この新しい試験的トラッキングモードは、ほとんどのアプリケーションとフレームワークで広く使用されるインストゥルメント化実行フレームワークに基づいています。このモードは、前述のリアクティブフレームワークが存在する場合など特にスレッドの使用率が高い場合に、エージェントの動作をより効率的にすることが期待されます。

    スレッド関連付けモードの選択

    エージェントによって使用されるスレッド関連付けモードは、app-agent-config.xml 構成ファイル内の async-instrumentation-strategy プロパティを使用して選択されます。新しい(試験的な)エグゼキュータベースのインストゥルメント化を使用するには、エージェントを起動する前に async-instrumentation-strategy  プロパティの値を constructor から executor に変更して app-agent-config.xml を変更します。また、JVM コマンドラインで appdynamics.async.instrumentation.strategy システムプロパティを設定することによって、インストゥルメント化方法を設定することもできます。例:
    Dappdynamics.async.instrumentation.strategy=executor

    システムプロパティは構成ファイルよりも優先されます。使用されるスレッドインストゥルメント化モードは、実行時に変更できません。スレッドの動作は、デフォルトでは Constructor モードを使用して追跡されます。