JDK Mission Control(JMC)は、JDK Flight Recorder(JFR)によって収集されたデータを分析するために使用されるダッシュボードソリューションとして最もよく知られている。JFRは、JDKの組み込みプロファイリングおよびイベント収集フレームワークである。JMC 8のバイナリリリースは、AdoptOpenJDK とOracleからダウンロードできるようになった。JMC 8は、デフォルトで新しいグラフとヒープダンプ分析が導入されており、アプリケーションに関するより多くの考察を提供する。
Eclipse IDE上に構築されたJMCは、スタンドアロンまたはEclipseプラグインとしてインストールできる。JMCは、JRockit Mission Controlの後継である。これは、Oracleが2008年に買収される前にAppeal Virtual Machinesによって作成されたものである。JMCは(本番環境の)プロファイリングおよび診断ツールであり、.jfr
ファイルを解析および処理するためのライブラリとしても使用できる。
JMCアプリケーションは、ローカルで実行されているすべてのJavaプロセスの概要を提供する。以下に示すように、実行中のJavaアプリケーションの1つを右クリックすると、ドロップダウンメニューに使用可能なオプションが表示される。JMXコンソールは、環境を継続的に監視したり、MBeanと対話したり、リモートマシンでjcmd
診断コマンドを呼び出したりするために使用される。さらに分析するために、フライトレコーディングとダンプヒープを使って、それぞれレコーディングとヒープダンプを作成できる。
JFRは、以前は本番環境ではライセンス料が必要だったコマンドラインツールである。ただし、OpenJDK 8u272以降は無料で利用できる。結果のデータは.jfr
ファイルとして保存される。JMCアプリケーションから[フライトレコーディングを開始]をクリックすることもできる。フライトレコーディングウィザードには、収集するレコーディングタイプとイベントのリストが表示される。
JFRの主な機能は、本番環境で低いオーバーヘッドで使用できることである。多くのスタックトレースを含む、記録中の約10万のイベントに対して、1分あたり約2~4MBのデータが保存される。JFRのオーバーヘッドは、選択した測定値によって異なる。デフォルト設定では、2パーセント未満である。
JOverflowは、ヒープダンプの高度な分析を提供するオプションのプラグインであるが、デフォルトでJMC 8に含まれるようになった。このリリースでは、プラグインはStandard Widget Toolkit(SWT)に変更された。JOverflowは、Javaヒープの分析も提供し、開発者によるヒープ最適化を支援する。開始するには、JMCアプリケーションでヒープダンプを作成して開く。階層ツリーマップなどのJOverflow機能を使用して、アプリケーションのヒープ使用量を改善できる。
以下に示すように、Flame Viewが改善され、標準のパースペクティブで使用できるようになった。このビューは、選択されたイベントに対するスタックトレースの集計を表示するために使用される。
JMC 8の新機能はグラフビューである。これは各ノードに個別のメソッドが含まれる有向グラフである。
上の図は、JMC 7で削除されたメソッドプロファイリングの呼び出し元と呼び出し先も示している。ただし、顧客の要求により、これらはJMC 8で再導入されている。
現時点では、グラフビューはWindowsではサポートされていない。サポートされている他のオペレーティングシステムでは、WebKitのインストールが必要になる場合があるため、JMCコンソールの出力で空のグラフがないか調べてください。たとえば、Linuxでは、WebKitは次のようにインストールできる。
apt install libwebkit2gtk-4.0-dev
JMC 8は、JMCエージェントの最初のリリースである。エージェントを使用すると、JFRイベントを任意のコードベースに宣言的に追加できる。エージェントはJMX APIを使用してインストルメンテーションを制御する。イベントを使用して、フィールドやパラメーター値などの要素をキャプチャできる。
新しいRules API 2.0を使用すると、他のルールの中間結果を使用できる。JFR Writerが新しいコアモジュールとして導入された。これは、Javaバッファーにイベントを書き込むことにより、テスト目的で使用できる。
JMCの将来のバージョンでは、すでに改善すべき箇所が検討されている。JDK 16では、新しい割り当てイベントが導入されている。場合によっては、割り当てイベントが非常に頻繁に発生し、パフォーマンスに影響を与える。新しいソリューションでは、特定の時点でサンプリングする代わりにデータ生成率を使用して、オーバーヘッドを削減する。
グラフビジュアライザーには、また、大量のデータとノードが表示される場合に、パフォーマンス上の課題がいくつかある。Marcus Hirt氏は、この問題が、ノイズの多いネットワークでのグラフの枝刈りに関連する論文に基づいて改善されると説明した。
フレームグラフとグラフビューはカウントに基づいて機能する。これはCPU負荷がかかる場合に適している。ただし、割り当てについては、測定にメモリを使用することを勧める。これは、グラフの属性セレクターを追加することで設定できる。
現在JMCの一部であるJMCエージェントは、将来の改善に対しても使用される。その1つは、スタックフレームを右クリックして、より詳細な情報を取得する機能である。
Datadogのエンジニアリングディレクターであり、OpenJDK JMCプロジェクトのプロジェクトリーダーであるMarcus Hirt氏は、いくつかの興味深いJMC関連のブログ投稿とチュートリアルを作成した。より詳細な情報は、彼のJMC 8およびBeyondのセッションでも入手できる。