1. 序章

この記事では、VisualVMとJava Management Extensions(JMX)を使用してJavaアプリケーションをリモート監視する方法を学習します。

2. JMX

JMXは、JVMアプリケーションの管理と監視のための標準APIです。 JVMには、JMXがこの目的で使用できるインストルメンテーションが組み込まれています。 その結果、通常、これらのユーティリティを「すぐに使用できる管理ツール」、この場合は「JMXエージェント」と呼びます。

3. VisualVM

VisualVMは、JVMに軽量のプロファイリング機能を提供するビジュアルツールです。 他にもたくさんの主流のプロファイリングツールがあります。 ただし、 VisualVMは無料であり、JDK8の早期アップデートまでJDK6U7リリースにバンドルされています。 他のバージョンでは、 JavaVisualVMがスタンドアロンアプリケーションとして利用できます。

VisualVM を使用すると、監視目的でローカルとリモートの両方のJVMアプリケーションに接続できます。

いずれかのマシンで起動すると、ローカルで実行されているすべてのJVMアプリケーションを自動検出して監視を開始します。 ただし、リモートアプリケーションを明示的に接続する必要があります。

3.1. JVM接続モード

JVMは、jstatdJMXなどのツールを介して監視するために自身を公開します。 これらのツールは、プロファイリングデータを取得するためのVisualVMなどのツールにAPIを提供します。

jstatd プログラムは、JDKにバンドルされているデーモンです。 ただし、機能には制限があります。 たとえば、CPU使用率を監視したり、スレッドダンプを取得したりすることはできません。

一方、JMXテクノロジーでは、JVMでデーモンを実行する必要はありません。 さらに、ローカルとリモートの両方のJVMアプリケーションのプロファイリングに使用できます。 ただし、すぐに使用できる監視機能を有効にするには、特別なプロパティを使用してJVMを起動する必要があります。 この記事では、JMXモードのみに焦点を当てます。

3.2. 起動

前に見たように、JDKバージョンはVisualVMにバンドルされているかどうかに関係なく提供されます。 いずれの場合も、適切なバイナリを実行することで起動できます。

./jvisualvm

バイナリが$JAVA_HOME / bin フォルダーにある場合、上記のコマンドはVisualVMインターフェースを開きます。個別にインストールすると、別のフォルダーにある可能性があります。

VisualVMは、デフォルトでローカルで実行されているすべてのJavaアプリケーションを起動してロードします。

3.3. 特徴

VisualVMは、いくつかの便利な機能を提供します。

  • ローカルおよびリモートのJavaアプリケーションプロセスの表示
  • CPU使用率、GCアクティビティ、ロードされたクラスの数、およびその他のメトリックの観点からプロセスパフォーマンスを監視する
  • すべてのプロセスのスレッドと、スリープや待機などのさまざまな状態でスレッドが費やす時間を視覚化する
  • 監視されているプロセスで何が起こっているかを即座に洞察するためにスレッドダンプを取得して表示する

VisualVM機能ページには、使用可能な機能のより包括的なリストがあります。 すべての適切に設計されたソフトウェアと同様に、[X132X]プラグインタブで利用可能なサードパーティのプラグインをインストールすることにより、VisualVMを拡張してより高度でユニークな機能にアクセスできます。

4. 遠隔モニタリング

このセクションでは、VisualVMとJMXをリモートで使用してJavaアプリケーションを監視する方法を示します。 また、必要なすべての構成とJVM起動オプションを調べる機会もあります。

4.1. アプリケーション構成

すべてではないにしても、ほとんどのJavaアプリケーションを起動スクリプトで起動します。 このスクリプトでは、startコマンドは通常、最大および最小のメモリ要件など、アプリケーションのニーズを指定するために重要なパラメータをJVMに渡します。

アプリケーションがMyApp.jarとしてパッケージ化されていると仮定して、メインのJMX構成パラメーターを含むスタートアップコマンドの例を見てみましょう。

java -Dcom.sun.management.jmxremote.port=8080 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Xms1024m -Xmx1024m -jar MyApp.jar

上記のコマンドでは、 MyApp.jar が起動され、ポート8080を介してすぐに使用できる監視機能が構成されています。 さらに、簡単にするためにSSL暗号化とパスワード認証を無効にしました。

4.2. VisualVM構成

VisualVMがローカルで実行され、 MyApp.jar がリモートサーバーで実行されているので、リモート監視セッションを開始できます。

左側のパネルを右クリックして、JMX接続の追加を選択します。

表示されるダイアログボックスの接続フィールドにhost:port の組み合わせを入力し、OKをクリックします。

成功すると、左側のパネルから新しい接続をダブルクリックすると、監視ウィンドウが表示されるはずです。

5. 結論

この記事では、VisualVMとJMXを使用したJavaアプリケーションのリモート監視について説明しました。