FAQ
JConsole とリモート管理


JConsole と JMX リモート管理

  1. Windows 上で JConsole を実行しています。「接続」ダイアログの「Local」タブに Java プロセスが表示されません。なぜですか。
  2. Windows の場合、ユーザー名に「_」 (下線) が含まれると JDK 5 の jconsole および jps コマンドが動作しません。JConsole は Java プロセスを見つけることができません。
  3. Windows システムのパスワードファイルをセキュリティー保護するにはどうしたらよいですか。
  4. 同一マシン上でリモートまたはローカルに実行されているアプリケーションに「Remote」タブを使って接続しようとすると、JConsole は接続に失敗します。ただし、同一マシン上で「Local」タブを使用する場合は、接続に成功します。
  5. Linux 上で稼働している JVM に、JConsole を使って接続を試みていますが成功しません。Windows および Solaris 上で稼働する JVM への接続は成功します。
  6. アプリケーションでは、SSL を使ったリモート管理が有効に設定されています。アプリケーションに接続するには、JConsole をどのように設定したらよいですか。
  7. JConsole を使ってファイアウォール越しにアプリケーションを監視できますか。

SNMP ベースの管理

  1. Java 仮想マシンの SNMP 管理用の標準 MIB はどこにありますか。使用する必要のある SNMP プロトコルのバージョンを教えてください。
  2. JVM MIB ツリー内ですべてのオブジェクトを表示できません。たとえば、jvmMemoryHeapUsed OID が表示されません。これは既知の問題ですか。

JConsole と JMX リモート管理

  1. Windows 上で JConsole を実行しています。「接続」ダイアログの「Local」タブに Java プロセスが表示されません。なぜですか。

    この問題は、大抵の場合、デフォルトの Windows 一時ディレクトリが FAT ファイルシステム上に存在するために発生します。TMP ファイルシステムが NTFS で、JConsole にプロセスが表示されない場合は、「FAQ #2」の説明に従ってユーザー名を確認してください。

    セキュリティー上の理由から、デフォルトの Windows 一時ディレクトリがファイルおよびディレクトリへのアクセス権設定をサポートするファイルシステム (NTFS ファイルシステムなど) 上に存在する場合にのみ、ローカルの監視および管理がサポートされます。十分なアクセス制御が提供されない FAT ファイルシステムでは、ローカルの監視および管理はサポートされません。

    次の方法で、この問題を回避できる場合があります。
    ローカルまたはリモート管理を有効にしてアプリケーションを実行する前に、TMP 環境変数を、NTFS ファイルシステム上のディレクトリ、またはファイルとディレクトリへのアクセス権設定をサポートする任意のファイルシステムを参照するように設定します。このファイルシステムは、マシンのローカルファイルシステムである必要があります。このオプションを対象のアプリケーションに対して設定するかどうかは、アプリケーションによって異なります。この変数をコマンドプロンプトまたはバッチスクリプト内で設定する場合は、次のように入力するだけです。

    set TMP=path

    環境変数は、「システムのプロパティー」の環境変数のリストに追加することで、グローバルに設定できます。 環境変数のリストは、「コントロールパネル」の「システム」を開き、「詳細設定」タブを選択して「環境変数」ボタンをクリックすると表示されます。このインタフェースでは、現在のユーザーが実行する全プロセスに対して変数を設定するか、システムの実行する全プロセスに対するシステム変数としてグローバルに設定するかを選択できます。

  2. Windows の場合、ユーザー名に「_」 (下線) が含まれると JDK 5 の jconsole および jps コマンドが動作しません。JConsole は Java プロセスを見つけることができません。

    これは、ユーザー名に「_」 (下線) が含まれる場合、Windows 上で jconsole と jps コマンドが動作しないという JDK 5 の既知の問題です。バグ 6301562 は、将来のリリースで修正される予定です。

  3. Windows システムのパスワードファイルをセキュリティー保護するにはどうしたらよいですか。

    詳細は、「Microsoft Windows システム上でパスワードファイルを保護する方法」を参照してください。

  4. 同一マシン上でリモートまたはローカルに実行されているアプリケーションに「Remote」タブを使って接続しようとすると、JConsole は接続に失敗します。ただし、同一マシン上で「Local」タブを使用する場合は、接続に成功します。

    大抵の場合、これは構成上の問題です。最初に、アプリケーションが、リモート管理が有効な状態で起動したことを確認してください(詳細は、「JMX を使用する監視と管理」を参照)。次に、リモート管理を有効にするために管理プロパティーで SSL が有効に設定されていること、およびその構成が正しいことを確認します。

    リモート管理が有効な場合、SSL はデフォルトで有効になります。com.sun.management.jmxremote.ssl プロパティーを false に設定することで、SSL を無効にできます。アプリケーションの設定に SSL プロパティーが使用されていないが、リモート管理で SSL が有効に設定されている場合、JConsole はアプリケーションへの接続に失敗します。リモート管理での SSL の使用方法については、「JMX を使用する監視と管理」の「SSL の使用」の節を参照してください。

    Linux 上でアプリケーションを実行する場合にだけ接続障害が発生する場合は、「FAQ #5」を参照してください。

  5. Linux 上で稼働している JVM に、JConsole を使って接続を試みていますが成功しません。Windows および Solaris 上で稼働する JVM への接続は成功します。

    大抵の場合、これは、Linux マシンの構成、またはアプリケーション実行用に指定された管理プロパティーの問題です。SSL の使用法については、「FAQ #4」も参照してください。

    次の点を確認してください。

  6. アプリケーションでは、SSL を使ったリモート管理が有効に設定されています。アプリケーションに接続するには、JConsole をどのように設定したらよいですか。

    アプリケーションで SSL を使用したリモート管理を有効にした場合、JMX エージェント (MBean サーバー) の稼働するシステム上でデジタル証明書が設定され、SSL が正しく構成されています。

    次に示すように、「JSSE ガイド」の記述に従ってキーストアを作成し、アプリケーション (Server) を起動済みであるとします。

    % java -Djavax.net.ssl.keyStore=keystore \
    -Djavax.net.ssl.keyStorePassword=password Server

    このアプリケーションに接続するには、次のように jconsole を実行する必要があります。

    % jconsole -J-Djavax.net.ssl.trustStore=truststore \
    -J-Djavax.net.ssl.trustStorePassword=trustword
    この構成により認証されるのは、サーバーだけです。クライアント認証を設定する場合は、JConsole の鍵に対して同様のキーストアを用意し、アプリケーションに対して適切なトラストストアを提供する必要があります。

  7. JConsole を使ってファイアウォール越しにアプリケーションを監視できますか。

    com.sun.management.jmxremote.port 管理プロパティーにより RMI Registry が接続可能なポートが指定されますが、RMIServer および RMIConnection リモートオブジェクトがエクスポートされるポートは、RMI スタックにより選択されます。特定のポートに対してリモートオブジェクト (RMIServer および RMIConnection) をエクスポートするには、プログラムを作成して、独自の RMI コネクタサーバーを作成する必要があります。詳細は、『Java SE 監視および管理ガイド』「JMX リモート API を使用したアウトオブボックスの管理の模倣」を参照してください。次の方法で、JMXServiceURL を指定する必要があります。

    JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://localhost:"+ port1 + "/jndi/rmi://localhost:"+ port2 + "/jmxrmi");
    このコマンドでは、port1RMIServer および RMIConnection リモートオブジェクトがエクスポートされるポート番号、port2 は RMI Registry のポート番号です。


SNMP ベースの管理

  1. Java 仮想マシンの SNMP 管理用の標準 MIB はどこにありますか。使用する必要のある SNMP プロトコルのバージョンを教えてください。

    Java 仮想マシン用の標準 MIB は、次の場所にあります。http://java.sun.com/j2se/1.5.0/docs/guide/management/JVM-MANAGEMENT-MIB.mibJVM MIB で公開される一部のオブジェクトは、64 ビットです。これらのオブジェクトを表示するには、SNMP v2 プロトコルを使用する必要があります。SNMP v1 プロトコルを使って JVM MIB を参照する場合、64 ビットオブジェクトは省略されます。

  2. JVM MIB ツリー内ですべてのオブジェクトを表示できません。たとえば、jvmMemoryHeapUsed OID が表示されません。これは既知の問題ですか。

    JVM MIB に含まれる 64 ビットオブジェクトでは、SNMP v2 プロトコルを使用する必要があります。SNMP v1 を使って JVM MIB を参照する場合、64 ビットオブジェクトはすべて省略されます。