このページでは、Java アプリケーションを監視し、一般的な問題をトラブルシューティングするために AppDynamics が提供しているいくつかのツールの概要を説明します。

JVMの主要業績評価指標(KPI)

一般的なJVMには、JVMのアクティビティおよび状態のさまざまな側面を反映する何千もの属性があります。AppDynamics がパフォーマンスの評価に最も役立つものとして焦点を当てている主なパフォーマンス指標は次のとおりです。

  • ロードしたクラス数および現在のロード数の合計
  • スレッド使用量
  • CPUプロセス使用量(%)

各ノードベースで、AppDynamicsは次のレポートを提供します。

  • ヒープ使用量
  • ガベージコレクション
  • メモリプールとキャッシング
  • Javaオブジェクトインスタンス

以下を対象とする追加のモニタリングを構成できます。

  • 自動リーク検出
  • カスタムメモリ構造

JVM のパフォーマンスの表示

ティアおよびノードのダッシュボードまたはメトリックブラウザで JVM のパフォーマンス情報を表示できます。

JVM 固有の情報については、ティアおよびノードのダッシュボードで次のタブを参照してください。

  • ティアおよびノードのダッシュボードの [Memory] サブタブでは、ヒープとガベージコレクション、自動リーク検知、オブジェクトインスタンスの追跡、カスタムメモリ構造など、さまざまなタイプの JVM パフォーマンス情報を表示できます。 
  • ティアとノードのダッシュボードの [JMX] サブタブでは、JVM クラス、ガベージコレクション、メモリ、スレッド、およびプロセス CPU に関する情報を表示できます。JMXメトリックサブタブのメトリックツリーで、アイテムをクリックして折れ線グラフにドラッグし、現在のメトリックデータをプロットします。

メトリックブラウザで [Application Infrastructure Performance] をクリックし、特定のノードの JVM フォルダを展開して、ガベージコレクション、クラス、プロセス CPU、メモリ、およびスレッドの使用に関する情報にアクセスします。

JVM 正常性に対するアラート

JVM または JMX メトリックを基づいて正常性ルールを設定することができます。正常性ルールが完成したら、正常性ルール違反をベースとした具体的なポリシーを作成します。正常性ルール違反に対する応答の 1 つにアラートがあります。正常性ルール、アラート、ポリシーの利用方法については、「アラートと応答」を参照してください。

MBean属性から追加の固定JMXメトリックを作成できます。詳細については、「MBeanからのJMXメトリックの構成」を参照してください。

JVM クラッシュガード

Standalone Machine Agent を使用すると、マシンまたはノードで JVM クラッシュが発生したらただちに通知され、修復アクションを実行することができます。JVM クラッシュは、アプリケーションの重大なランタイム問題の兆候である可能性があるためです。JVM クラッシュは、JVM クラッシュガード の一部として実装されています。有効化すると、JVM クラッシュに早急に対応するために必要となる重要な情報を受け取ることができます。

メモリ管理

メモリ管理には、ヒープ、特定のメモリプール、およびガベージコレクションの管理が含まれます。本セクションでは、ヒープの管理について説明します。Monitoring JVM Information」の説明に従って、特定のノードのメトリックブラウザまたは [Memory] タブでヒープ情報を表示できます。

JVMヒープのサイズはパフォーマンスに影響を与える可能性があるため、必要に応じて調整する必要があります。

  • 小さすぎるヒープは、過剰なガベージコレクションを引き起こし、OutOfMemory の例外の可能性を高めます。
  • 大きすぎるヒープはガベージコレクションを遅延させ、大量のライブデータを処理するために JVM プロセスをページングする必要があるときにオペレーティングシステムに負荷をかけます。

詳細については、ガベージコレクションを参照してください。

メモリリークの検出

JVMヒープとメモリプールをモニタリングすることで、潜在的なメモリ不足を特定できます。ヒープの谷が増え続けている場合、不適切なヒープ構成またはメモリリークの可能性があります。survivor領域またはold領域の使用量パターンを分析することで潜在的なメモリリークを特定できることがあります。メモリリークのトラブルシューティングについては、「Java メモリリーク」を参照してください。

メモリスラッシングの検出

多数の一時オブジェクトが非常に短い間隔で作成されると、メモリスラッシングが起こります。このようなオブジェクトは一時的なもので最終的にクリーンアップされますが、ガベージコレクションのメカニズムがオブジェクト作成率に合わせることが困難になり、アプリケーションのパフォーマンスの問題につながることがあります。これにより、アプリケーションのパフォーマンスの問題が発生する可能性があります。ガベージコレクションにかかる時間をモニタリングすると、メモリスラッシングなどのパフォーマンスの問題の詳細がわかります。たとえば、メジャーコレクションに対するスパイク数の増加は、JVM がビジネス トランザクション トラフィックを処理する能力に影響し、潜在的なメモリスラッシュを示す可能性があります。

[Tiers & Nodes > Memory > Object Instance Tracking] サブタブは、潜在的なメモリスラッシングの根本原因の特定に役立ちます。メモリスラッシングのトラブルシューティングについては、「Javaメモリスラッシング」を参照してください。

長期コレクションのモニタリング

AppDynamics は自動リーク検出で、長期の Java コレクション(HashMap、ArrayList など)を自動的に追跡します。構成したカスタムメモリ構造は、[Tiers & Nodes] > [ Memory] > [Custom Memory Structures] に表示されます。 

AppDynamics は以下の可視情報を提供します。

  • 遅延、過剰遅延および停滞したビジネストランザクションのキャッシュアクセス
  • 使用統計(ビジネストランザクションレベルにロールアップ)
  • アクセスされるキー
  • 内部キャッシュ構造のディープサイズ