ぺーぺーSEのブログ

備忘録・メモ用サイト。

Flight Recorder、Mission Control、Native Memory Tracking

Oracle (HotSpot) JDK7 update40以降で「Flight Recorder」、「Mission Control」、「Native Memory Tracking」がHotSpotに同梱されている。
これらは元々JRockitの機能だったが、HotSpotとJRockitの統合(HotRockit)に伴いHotSpotへ移植された。

Flight Recorder

OSからアプリケーションのレベルまで、わずかなオーバーヘッドで詳細な稼働情報を収集してログ・ファイルに記録してくれるツール
Flight Recorderの名の通り、飛行機が離陸してからの記録を随時残してくれるイメージ。
一般のプロファイリング・ツールでは、オーバーヘッドが大きいが、Java Flight Recorderであればそうしたことは無い。
また「サーブレットの応答速度が一定時間を超えた場合」「ヒープの空き容量が一定値を超えた場合」のように指定した閾値を超えた際に記録を出力することもできる。
Flight Recorderが記録できる情報は下記の通り。

分類 取得項目
OS コンテキスト・スイッチ
CPUビジー
物理メモリの使用状況
環境変数の情報
JVM以外のプロセス情報
JVM オブジェクト・アロケーション
GC
空メモリ
Nativeコードの最適化
JVMのCPUビジー
システム・プロパティ
クラス・ロード
JITコンパイル
クラス別ヒープ利用状況
Java App ファイル/ソケットの読み書き
ロック獲得/待機、イベント待機
例外
WebLogic Connector
Servlet
EJB
JDBC
Web Service
JTA


Mission Control

Mission Controlは、Flight Recorderで記録した情報から、システムの稼働状況を分析・可視化するツール
スタンドアロンツールに加えて、Eclipseプラグインとしても提供している。

Native Memory Tracking

JRockitの診断コマンドprint_memnusage相当がHotSpotに移植されたもの。
従来では難しかったNative領域のリークを確認できる。
オーバーヘッドは5〜10%あがるとされる。

Flight Recorder

Flight Recorderの記録の方法
  • JRockit(下記のどちらかで起動する)
    • 起動オプション
      • 「-XX:FlightRecorderOptions=disk=true -XX:StartFlightRecordering=filename=<出力ファイル名>,setting=<テンプレートファイル名>,maxage=<ディスク上に保持する期間>」
    • jrcmdコマンド
      • jrcmd start_flight_recording settiongs=<テンプレートファイル名>
  • HotSpot(下記の両方実施で起動する)
    • 起動オプション
      • 「-XX:+UnlockCommercialFeatures -XX:+FlightRecorder」
    • jcmdコマンド
      • jcmd
  • Mission Control
    • JVMブラウザ→フライト記録の開始→・・・テンプレート選択


Mission Control

JDKのbin配下に「jmc.exe」というのがあるのでこれを実行すると起動する。

  • Flight記録のテンプレート(組み込み)-JRockit
    • 通常のプロファイリング
      • 標準的なプロファイリング・イベント。低レベルのイベントやリソース消費が大きい一部のイベントは除外。オーバーヘッドは小さい。
    • ロックを含むプロファイリング
      • 通常のプロファイリング・テンプレートに低レベルのロック・イベントを含む。オーバーヘッドは大きい。
    • リアル・タイム
      • GC情報などメモリ関連の情報に重点を置く。オーバーヘッドは考慮不要。
  • Flight記録のテンプレート(組み込み)-HotSpot
    • Continuout(連続)
      • 本番環境で連続的に使用しても問題ない低オーバーヘッド構成(通常は1%未満のオーバーヘッド)
    • Profiling(プロファイリング)
      • プロファイリング用の低オーバーヘッド構成(通常は2%程度のオーバーヘッド)

Eclipse plugin
下記のupdate siteを利用してインストール
http://download.oracle.com/technology/products/missioncontrol/updatesites/base/4.1.0/eclipse/

Native Memory Tracking

使い方
  • 起動オプション
    • 「-XX:NativeMemoryTracking=
      • off : NativeMemoryTrackingをオフ(デフォルト)
      • summary : サブシステム毎のメモリ使用量のみ集計
      • detail : summaryに加え、コールサイト毎のメモリ使用量も集計
  • jcmdコマンド
    • jcmd VM.native_memory
    • ヘルプ「jcmd help VM.native_memory」


追加オプション
  • 「-XX:+UnlockDiagnosticVMOptions」を指定することにより後述の追加オプションを有効化する
  • 「-XX:+PrintNMTStatistics」
    • VM終了時にNMTの統計情報を出力
    • オプション「-XX:NativeMemoryTracking=」の指定に従う
  • 「-XX:-AutoShutdownNMT」
    • NMTの自動シャットダウンを無効化
    • リソースが少ない状態になるとNMTが自動停止されることへの対策



参考:
http://www.infoq.com/jp/news/2013/10/misson-control-flight-recorder
http://builder.japan.zdnet.com/sp_oracle/weblogic_2013/35038953/
http://acro-engineer.hatenablog.com/entry/20130109/1357692863