このページでは、Java アプリケーションのオブジェクトインスタンス追跡を構成して使用する方法について説明します。この構成が必要かどうかを確認したい場合は、「Javaメモリスラッシング」を参照してください。 

オブジェクトインスタンス追跡が有効な場合、AppDynamics ではデフォルトでヒープの上位 20 のアプリケーションと上位 20 のシステム(コア Java)クラスが追跡されます。特定のクラスを追跡することもできます。

AppDynamics では、システムのオーバーヘッドが急増するため、デフォルトでコア Java クラスの割り当て追跡は実行されません。しかし、短期間(例えばトラブルシューティング中)または実稼働前の環境でコアクラスを追跡することは可能です。詳細については、「コア Java クラスの割り当て追跡の有効化」を参照してください。

オブジェクトインスタンス追跡を有効にすると、エージェントによって取得される情報量が増加し、オーバーヘッドが増えます。このためAppDynamicsでは、メモリリークの可能性をトラブルシューティングする間のみオブジェクトインスタンス追跡を使用することが推奨されます。通常のオペレーション時は、普通はこの機能を有効にする必要はありません。 

オブジェクトインスタンス追跡を設定にするには、Configure Agent Properties 権限が必要です。追跡するカスタムクラスを構成するには、Configure Memory Monitoring 権限が必要です。詳細については、Create and Manage Custom Rolesを参照してください。

オブジェクトインスタンス追跡の前提条件

  • オブジェクトインスタンスの追跡のプラットフォームサポートについては、「Java対応環境」を参照してください。  
  • Java 9 より前の JVM の場合、オブジェクトインスタンスの追跡は tools.jar を使用します。アプリケーションがJDKで実行されている場合は、tools.jarがすでに利用可能になっています。JRE で実行している場合は、tools.jar を <JRE_HOME>/lib/ext に追加して JVM を再起動する必要があります。tools.jar は <JAVA_HOME>/lib/tools.jar にあります。Java 9 以降の場合、JEP220 では OIT に必要な機能は Java Runtime コアに移動されているので、tools.jar は必要ありません。
  • libattach.so(Linux)または attach.dll(Windows)も JDK から JRE にコピーする必要がある場合があります。 
  • JDKバージョンによっては、以下のように(他の-jarオプションとともに)クラスパスを指定する必要もある場合がある。

jdk.jcmd は、カスタムランタイムに必要なモジュールではなくなりました。ただし、オブジェクトインスタンス追跡を適切に機能させるには、これが必要です。

クラスパスの指定

JDK ランタイム環境を使用している場合、アプリケーションに対して -classpath オプションを使用してクラスパスを設定します。例:

  • Windowsの場合:
    java -classpath <complete-path-to-tools.jar>;%CLASSPATH% -jar myApp.jar
  • Unixの場合:
    java -Xbootclasspath/a:<complete-path-to-tools.jar> -jar myApp.jar

オブジェクトインスタンス追跡の有効化

オブジェクトインスタンス追跡セッションは、以下の手順で開始します。

  1. 左側のナビゲーションウィンドウで、[Tiers & Nodes] をクリック。 
  2. 右のペインで、ティアノードを展開し、オブジェクトインスタンス追跡を有効にするノードのノードダッシュボードを開く。 
  3. [Memory] タブをクリック。
  4. Object Instance Trackingサブタブをクリック。
  5. [ON] をクリック。

これで追跡されたクラスがObject Instance Trackingテーブルに表示されます。追跡されたクラスをドリルダウンして詳細を見ることができます。 

特定のクラスの追跡

パフォーマンス上の理由から、ヒープの上位 20 のアプリケーションクラスと上位 20 のシステム(コア Java)クラスのみが自動的に追跡されます。 

追跡対象として特定のクラスのインスタンスを指定する場合は、[Configure Custom Classes to Track] オプションを使います。なお、ここで構成したクラスが追跡されるのは、インスタンスカウントが JVM の上位 1000 のインスタンスカウント内にある場合のみです。 

カスタムクラスのインスタンスを追跡するには:

  1. [Object Instance Tracking] タブで、次をクリック。Configure Custom Classes to Track.
  2. 表示される [Instrumentation] ページで、カスタマイズするティアをクリック。 
  3. ティアの [Object Instance Tracking] セクションで、[Add] をクリック。 
  4. 追跡するクラスの完全修飾クラス名を入力し、[Save] をクリック。

これで、追加したクラスがオブジェクトインスタンス追跡セッション中に追跡されるようになります。