9 ネイティブ・メモリー・トラッキング

この章では、ネイティブ・メモリー・トラッキング(NMT)機能について説明します。NMTは、HotSpot VMの内部メモリー使用状況を追跡するJava HotSpot VM機能です。NMTデータは、jcmdユーティリティを使用してアクセスできます。NMTは、サードパーティ・ネイティブ・コードおよびOracle Java Development Kit (JDK)クラス・ライブラリのメモリー割当てを追跡しません。NMTは、Java Mission Control (JMC)のHotSpotにNMTのMBeanを含めません。

主な機能

jcmdでネイティブ・メモリー・トラッキングを使用する場合、Java仮想マシン(JVM)またはHotSpot VMのメモリー使用状況を異なるレベルで追跡できます。NMTは、JVMまたはHotSpot VMが使用するメモリーのみを追跡し、ユーザーのネイティブ・メモリーは追跡しません。NMTは、クラス・データ共有(CDS)アーカイブによって使用されるメモリーの完全な情報は提供しません。

HotSpot VMのNMTは、デフォルトでオフになっています。NMTをオンにするには、JVMコマンドライン・オプションを使用します。高度なランタイム・オプションの詳細は、Java Development Kitツール仕様javaに関する項を参照してください。

NMTは、jcmdユーティリティを使用してアクセスできます。jcmdを使用したNMTデータへのアクセスを参照してください。jcmdユーティリティを使用してNMTを停止できますが、jcmdユーティリティを使用してNMTを起動または再起動することはできません。

NMTでは次の機能がサポートされています。

  • サマリー・レポートおよび詳細レポートの生成。

  • 後の比較のための初期のベースラインの設定。

  • JVMコマンドライン・オプションによるJVM終了時のメモリー使用量レポートの要求。「VM終了時のNMT」を参照してください。

ネイティブ・メモリー・トラッキングの使用

NMTデータにアクセスするには、NMTを有効にしてから、jcmdユーティリティを使用する必要があります。

NMTの有効化

NMTを有効にするには、次のコマンドライン・オプションを使用します。

-XX:NativeMemoryTracking=[off | summary | detail]

ノート:

NMTを有効にすると、5-10%のパフォーマンス・オーバーヘッドが発生します。

次の表に、NMTコマンドラインの使用オプションを示します。

表9-1 NMTの使用オプション

NMTのオプション 説明
off

NMTはデフォルトでオフになっています。

summary

サブシステム別に集約されたメモリー使用量のみ収集します。

detail

個々のコール・サイト別のメモリー使用量を収集します。

jcmdを使用したNMTデータへのアクセス

jcmdを使用して収集したデータをダンプし、必要に応じて、そのデータを最後のベースラインと比較します。

jcmd <pid> VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]

表9-2 jcmdのNMTオプション

jcmdのNMTオプション 説明
summary

カテゴリ別に集約されたサマリーを出力します。

detail
  • カテゴリ別に集約されたメモリー使用量の出力
  • 仮想メモリー・マップの出力
  • コール・サイト別に集約されたメモリー使用量の出力
baseline

比較のために新しいメモリー使用量スナップショットを作成します。

summary.diff

最後のベースラインに照らして新しいサマリー・レポートを出力します。

detail.diff

最後のベースラインに照らして新しい詳細レポートを出力します。

shutdown

NMTを停止します。

VM終了時のNMTデータの取得

ネイティブ・メモリー・トラッキングが有効になっている場合、VMの終了時に最後のメモリー使用量のデータを取得するには、次のVM診断コマンドライン・オプションを使用します。詳細レベルは、トラッキング・レベルに基づいています。

-XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics

VMの内部メモリー割当てをモニターし、VMのメモリー・リークを診断する方法は、Java Platform, Standard Editionトラブルシューティング・ガイドネイティブ・メモリー・トラッキングを参照してください。