多数の一時オブジェクトが非常に短い間隔で作成されると、メモリスラッシングが起こります。このようなオブジェクトは一時的なもので最終的にクリーンアップされますが、ガベージコレクションのメカニズムがオブジェクト作成速度に追いつくことが困難になり、アプリケーションのパフォーマンスの問題につながることがあります。これにより、アプリケーションのパフォーマンスの問題が発生する可能性があります。ガベージコレクションにかかる時間をモニタリングすると、メモリスラッシングなどのパフォーマンスの問題の詳細がわかります。

たとえば、主要なコレクションのスパイク数の増加はJVMの遅延、またはメモリスラッシングの可能性を示しています。オブジェクトインスタンスのトラッキングを使用してメモリスラッシングの原因を特定します。オブジェクトインスタンスのトラッキングを構成して有効化するには、「Javaのオブジェクトインスタンスの追跡」をご参照ください。

AppDynamics は、上位 20 のコア Java(システム)クラスと上位 20 のアプリケーションクラスのオブジェクトインスタンスを自動的に追跡します。 

Object Instance Trackingサブタブには、特定のクラスのインスタンス数と、それらのJVMにおけるオブジェクトのカウントトレンドがグラフで表示されます。また、すべてのインスタンスで使用されるシャローメモリサイズ(オブジェクトのメモリフットプリントとそこに含まれるプリミティブ)が表示されます。

メモリスラッシングの分析

コレクションでメモリスラッシング問題が特定されたら、問題が疑われるクラスにドリルダウンして診断セッションを開始します。 

モニタリングするクラス名を選択し、オブジェクト インスタンス トラッキング ダッシュボード上部にある [Drill Down] をクリックするか、クラス名を右クリックし、[Drill Down] オプションを選択します。

一度にひとつのインスタンスまたはクラス名へのドリルダウンアクションをトリガーすると、最適なパフォーマンス結果を得られます。

ドリルダウンアクションがトリガーされると、オブジェクトインスタンスのデータコレクションが毎分実行されます。このデータコレクションは診断セッションとみなされ、そのクラスのオブジェクトインスタンストラッキングダッシュボードのアイコン()が更新され、診断セッションが進行中であることが示されます。
Object Instance Tracking

オブジェクト インスタンス トラッキング ダッシュボードは、メモリスラッシングの可能性を示します。オブジェクト インスタンス トラッキング ダッシュボードに表示されるメモリスラッシング問題の主な指標は以下のとおりです。

  • Current Instance Count:大きな数は、多数の一時オブジェクトの割り当ての可能性を示す。
  • Shallow Size:クラスのすべてのインスタンスが使用する大まかなメモリ。シャローサイズが大きいとメモリスラッシングの可能性がある。
  • Instance Count Trend:のこぎり状の波型はメモリスラッシングを示す。

この時点でメモリスラッシングの問題が疑われる場合は、そのことを確認する必要があります。「To verify memory thrash」を参照してください。

メモリスラッシングの確認

モニタリングするクラス名を選択し、オブジェクト インスタンス トラッキング ダッシュボード上部にある [Drill Down] をクリックします。[Object Instance Tracking] ウィンドウで、[Show Major Garbage Collections] をクリックます。

以下のオブジェクトインスタンストラッキングの概要では、メモリスラッシングのその他の兆候が提供されます。

Object Instance Tracking Overview

インスタンス数がガベージコレクションのサイクルによって変わらない場合、メモリスラッシングの問題ではなくリークの可能性があります。詳細については、「Java メモリリーク」を参照してください。

割り当てトラッキングを使用した Java メモリスラッシングのトラブルシューティング

割り当てトラッキングは、特定のクラスのインスタンスを割り当てるすべてのコードパスとビジネストランザクションを追跡します。そして、インスタンスを作成および破棄するコードパス/ビジネストランザクションを検出します。

割り当てトラッキングを使用するには、次の手順を実行します。

  1. [Drill Down] オプションを使用し、診断セッションをトリガーする。
  2. Allocation Trackingタブをクリックする。
  3. [Start Allocation Tracking Session] をクリックし、コードパスとビジネストランザクションのトラッキングを開始する。
  4. セッション期間を入力し、データ生成に少なくとも1~2分を割り当てる。
  5. [Refresh] をクリックし、セッションデータを取得する。
  6. セッションをクリックし、詳細を表示する。 
  7. Code PathsとBusiness Transactionパネルに表示されている情報を使用して、メモリスラッシングの問題の根源を特定する。

Javaオブジェクトインスタンスのモニタリング

アプリケーションが(JDK ではなく)JRE を使用している場合、以下の手順でオブジェクト インスタンス トラッキングを有効にします。

  1. tools.jar ファイルが jre/lib/ext ディレクトリにあることを確認する。
  2. ノードダッシュボードで [Memory] タブをクリック。 
  3. [Memory] タブで、[Object Instance Tracking] サブタブをクリック。
  4. [On]、[OK] の順にクリックします。

詳細については、「Javaのオブジェクトインスタンスの追跡」を参照してください。