よくある質問
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」も参照してください。

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

    • ホスト名がホスト・アドレスに正しく解決されることを確認します。

      hostname -i」コマンドを実行します。127.0.0.1が出力される場合、JConsoleはLinuxマシン上で稼働するJVMに接続できていません。この問題を解決するには、ホスト名がホスト・アドレスに解決されるように/etc/hostsを編集します。

    • Linuxマシンの構成を確認し、アプリケーションに接続するためにJConsoleを実行するホストからのパケットを受け入れるかどうかを調べます。

      パケット・フィルタリングは、Linuxカーネルに組み込まれています。「/sbin/iptables --list」を実行して、リモート管理用に作成されたJMXエージェントへの接続が外部クライアントに許可されているかどうかを確認します。次のコマンドを実行して、JConsoleなどの外部クライアントに接続を許可する規則を追加します。

      /usr/sbin/iptables -I INPUT -s jconsole-host -p tcp --destination-port jmxremote-port -j ACCEPT

      ここで、jconsole-hostはJConsoleが稼働するホスト名またはホスト・アドレスで、jmxremote-portは、com.sun.management.jmxremote.portに対して設定されるリモート管理用のポート番号です。

  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)をエクスポートするには、『Java SEモニタリングおよび管理ガイド』の「JMXリモートAPIを使用したアウトオブボックスの管理の模倣」セクションの説明に従って、プログラムを作成して、独自のRMIコネクタ・サーバーを作成する必要があります。次の方法で、JMXServiceURLを指定する必要があります。

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

SNMPベースの管理

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

    JVM-MANAGEMENT-MIB.mibファイルがJava仮想マシンの標準MIBです。JVM MIBで公開される一部のオブジェクトは、64ビットです。これらのオブジェクトを表示するには、SNMP v2プロトコルを使用する必要があります。SNMP v1プロトコルを使用してJVM MIBを参照する場合、64ビット・オブジェクトは省略されます。

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

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


Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.