VisualVM

GraalVMは、VisualVM (オールインワンのJava (およびポリグロット)のモニタリングとトラブルシューティング・ツール)をサポートしています。GraalVMは、サポートされているゲスト言語のヒープ分析を含む、強力で使いやすいJavaツールを提供します。現在、次の言語および機能を使用できます:

VisualVMの起動

VisualVMは、インストール可能なコンポーネントとして出荷され、GraalVMアップデータを使用してGraalVMに追加できます:

gu install visualvm

これにより、$JAVA_HOME/binディレクトリにVisualVMがインストールされます。VisualVMを起動するには、jvisualvmを実行します:

$JAVA_HOME/bin/jvisualvm

ツールを起動するとすぐに、VisualVMプロセス自体を含むローカルで実行中のすべてのJavaプロセスが、「アプリケーション」領域に表示されます。

ヒープ・ダンプの取得

たとえば、Rubyアプリケーションのヒープ・ダンプを後で分析するために取得するには、アプリケーションを起動し、ウォームアップするまで数秒間実行します。次に、VisualVMでそのプロセスを右クリックし、ヒープ・ダンプ・アクションを起動します。Rubyプロセスの新しいヒープ・ビューアが開きます。

ノート: ヒープ・ダンプ・サポートは、ネイティブ・イメージを使用する際には明示的に有効にする必要があります。native-imageツールを起動する際に--enable-monitoring=heapdump,jvmstatオプションを追加して、ヒープ・ダンプ機能を有効にし、VisualVMがjvmstatを介してネイティブ実行可能ファイルを検出できるようにします。これにより、アプリケーションでは、SIGUSR1シグナルを受信したときにシグナルを処理し、ヒープ・ダンプを取得します。ネイティブ・イメージ・プロセスからのヒープ・ダンプの取得の詳細は、ネイティブ・ヒープ・ダンプの生成のページを参照してください。

オブジェクトの分析

最初は、Javaヒープのサマリー・ビューが表示されます。Rubyヒープを分析するには、ヒープ・ビューアのツールバーの左端にある(「サマリー」)ドロップダウンをクリックし、Rubyヒープのスコープを選択して「オブジェクト」ビューを選択します。これにより、ヒープ・ビューアに、すべてのRubyヒープ・オブジェクトがタイプ別に集計されて表示されます。

結果ビューのProcノードを展開して、このタイプのオブジェクトのリストを表示します。各オブジェクトには、基礎となる実装によって提供される論理値が表示されます。使用可能な場合は、オブジェクトを展開して変数および参照にアクセスします。

ツールバーのボタンをクリックして、「プレビュー」、「変数」および「参照」の詳細を有効にし、個々のProcTypeオブジェクトを選択します。使用可能な場合、「プレビュー」ビューには対応するソース・フラグメントが表示され、「変数」ビューにはオブジェクトの変数が表示され、「参照」ビューには選択したオブジェクトを参照するオブジェクトが表示されます。

最後に、ヒープ・ビューアのツールバーにある「初期設定」ドロップダウンを使用して、ビューをすべてのオブジェクトから「所有者」またはGCルートに切り替えます。ヒープ所有者を表示するには、保持されているサイズを最初に計算する必要があり、server.rbの例では数分かかることがあります。ツールバーの「オブジェクト」集計を選択して、個々の所有者またはGCルートを表示します。

スレッドの分析

ヒープ・ビューアのツールバーの左端にあるドロップダウンをクリックし、Rubyヒープの「スレッド」ビューを選択します。ヒープ・ビューアに、ローカル・オブジェクトを含むRubyスレッド・スタック・トレースが表示されるようになります。スタック・トレースは、HTMLツールバー・ボタンをクリックしてテキストで表示することもできます。

JFRスナップショットの読取り

GraalVM 19.2.x以降にバンドルされているVisualVMツールには、JDK Flight Recorder (以前のJava Flight Recorder)で作成されたスナップショットである、JFRスナップショットを読み取る機能があります。JFRは、実行中のJavaアプリケーションに関する診断およびプロファイリングのデータを収集するツールです。Java Virtual Machine (JVM)に統合されていて、パフォーマンスのオーバーヘッドがほとんど発生しないため、高負荷の本番環境でも使用できます。

プラグインとしてリリースされたJFRサポートをインストールするには:

  1. $JAVA_HOME/bin/jvisualvmを実行して、VisualVMを起動します。
  2. 「ツール」>「プラグイン」→使用可能なプラグインに移動して、使用可能なすべてのプラグインをリストし、VisualVM-JFRモジュールおよびVisualVM-JFR-Genericモジュールをインストールします。

JFRスナップショットは、「ファイル」→「ロード」アクションを使用するか、JFRスナップショット・ノードをダブルクリックして、スナップショットをJFRリポジトリに永続的に追加することで開くことができます。JFRスナップショットを作成するには、使用するJavaバージョンのドキュメントに従ってください。

JFRビューアでは、Java 7以降から作成されたすべてのJFRスナップショットを読み取り、ツール・ユーザーによく知られている一般的なVisualVMビューでデータを表示します。

現在、次のビューおよび機能タブを使用できます:

ノート: 現在、JDK Flight Recorderのサポートは試験段階にあります。JVM内部の分析、イベント・スタック・トレースの表示、ライブ・プロセスからのJFRスナップショットの作成のサポートなどの一部の拡張機能は、このプレビュー・バージョンでは使用できませんが、今後のリリースで段階的に対処されます。