自動リーク検出
ノードダッシュボードの [Memory] タブで [Automatic Leak Detection] にアクセスできます。[Automatic Leak Detection] はデフォルトで無効になっています。これは、JVM のオーバーヘッドが増加するためです。メモリリークの問題が疑われる場合にのみリーク検知モードを有効化してください。リークの原因を特定したら、[Automatic Leak Detection] は無効にします。
自動リーク検知は、On Demand Capture Sessionsを使用して、キャプチャ期間内に積極的に使用されるコレクション(JDK Map または Collection インターフェイスを実装するクラス)をキャプチャします。デフォルトのキャプチャ期間は10分です。
Splunk AppDynamics は、以下の基準を満たすすべての Java コレクションを追跡します。
- コレクションが少なくとも 30 分間有効である
- コレクションに少なくとも 1000 個のエレメントがある。
- コレクションのディープサイズは少なくとも 5 MB。エージェントは、コレクションのすべてのオブジェクトについて再帰的にオブジェクトグラフを横断し、ディープサイズを計算します。
リーク検知基準のデフォルトは、以下のノードプロパティで定義されます。
-
minimum-age-for-evaluation-in-minutes
-
minimum-number-of-elements-in-collection-to-deep-size
-
minimum-size-for-evaluation-in-mb
「アプリケーション エージェントのノードプロパティ」を参照してください。
Javaエージェントはコレクションを追跡し、線形回帰モデルを使ってリークの可能性を識別します。一定期間のコレクションへの頻繁なアクセスを追跡することで、リークの根本原因を特定できます。
コレクションが基準を満たすと、Splunk AppDynamics はコレクションのサイズの長期的な成長傾向をモニタリングします。プラスの成長は、コレクションがメモリリークの元である可能性を示しています。
Splunk AppDynamics がリーク元コレクションを特定すると、Java エージェントは 30 分ごとに自動的に診断をトリガーします。診断では、コードパスのシャローコンテンツダンプとアクティビティトレース、およびコレクションにアクセスするビジネストランザクションがキャプチャされます。エージェントによってモニタリングされるリーク元コレクションをドリルダウンすることで、コンテンツサマリキャプチャセッションとアクセストラッキングセッションを手動でトリガーできます。
また、カスタムメモリ構造のメモリリークをモニタリングすることもできます。通常、カスタムメモリ構造はキャッシングソリューションとして使用されます。分散環境では、キャッシングがメモリリークの主な原因になりやすい傾向があります。そのため、こうしたメモリ構造のメモリ統計を管理および追跡することが重要です。それには、事前にカスタムメモリ構造を構成する必要があります。「Javaのカスタムメモリ構造」を参照してください。