この問題は、たいていの場合、デフォルトのWindows一時ディレクトリがFATファイル・システム上に存在するために発生します。TMPファイル・システムがNTFSで、JConsoleにプロセスが表示されない場合は、「FAQ#2」の説明に従ってユーザー名を確認してください。
セキュリティ上の理由から、デフォルトのWindows一時ディレクトリがファイルおよびディレクトリへのアクセス権設定をサポートするファイル・システム(NTFSファイル・システムなど)上に存在する場合にのみ、ローカル・モニタリングおよび管理がサポートされます。十分なアクセス制御が提供されないFATファイル・システムでは、これはサポートされません。
次の方法で、この問題を回避できる可能性があります。
ローカルまたはリモート管理を有効にしてアプリケーションを実行する前に、TMP環境変数を、NTFSファイル・システム上のディレクトリまたはファイルとディレクトリへのアクセス権設定をサポートする任意のファイル・システムを参照するように設定します。このファイル・システムは、マシンのローカル・ファイル・システムである必要があります。このオプションを対象のアプリケーションに対して設定するかどうかは、アプリケーションによって異なります。この変数をコマンド・プロンプトまたはバッチ・スクリプト内で設定する場合は、次のように入力するだけです。
set TMP=path
環境変数は、「システムのプロパティ」の環境変数のリスト(「コントロール・パネル」>「システム」を開き、「詳細設定」タブを選択して「環境変数」ボタンをクリックすると表示されます)に追加することで、グローバルに設定できます。このインタフェースでは、現在のユーザーが実行する全プロセスに対して変数を設定するか、システムの実行する全プロセスに対するシステム変数としてグローバルに設定するかを選択できます。
これは、ユーザー名に「_」(アンダースコア)が含まれる場合、Windows上でjconsoleとjpsコマンドが動作しないというJDK 5の既知の問題です。バグ6301562は、将来のリリースで修正される予定です。
詳細は、「Microsoft Windowsシステム上でパスワード・ファイルをセキュリティ保護する方法」のドキュメントを参照してください。
たいていの場合、これは構成上の問題です。最初に、アプリケーションが、リモート管理が有効な状態で起動したことを確認してください。(詳細は、「JMXを使用するモニタリングと管理」のドキュメントを参照)。次に、リモート管理を有効にするために管理プロパティでSSLが有効に設定されていること、およびその構成が正しいことを確認します。
リモート管理が有効な場合、SSLはデフォルトで有効になります。com.sun.management.jmxremote.sslプロパティをfalseに設定することで、SSLを無効にできます。アプリケーションの設定にSSLプロパティが使用されていないが、リモート管理でSSLが有効に設定されている場合、JConsoleはアプリケーションへの接続に失敗します。リモート管理でのSSLの使用方法については、「JMXを使用するモニタリングと管理」ドキュメントの「SSLの使用」セクションを参照してください。
Linux上でアプリケーションを実行する場合にだけ接続障害が発生する場合は、「FAQ#5」を参照してください。
たいていの場合、これは、Linuxマシンの構成、またはアプリケーション実行用に指定された管理プロパティの問題です。SSLの使用法については、「FAQ #4」も参照してください。
次の点を確認してください。
「hostname -i」コマンドを実行します。127.0.0.1が出力される場合、JConsoleはLinuxマシン上で稼働するJVMに接続できていません。この問題を解決するには、ホスト名がホスト・アドレスに解決されるように/etc/hostsを編集します。
パケット・フィルタリングは、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に対して設定されるリモート管理用のポート番号です。
アプリケーションで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 \上記の構成により認証されるのは、サーバーだけです。クライアント認証を設定する場合は、JConsoleの鍵に対して同様のキーストアを用意し、アプリケーションに対して適切なトラスト・ストアを提供する必要があります。
-J-Djavax.net.ssl.trustStorePassword=trustword
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");上記のコマンドの中のport1はRMIServerおよびRMIConnectionリモート・オブジェクトがエクスポートされるポート番号、port2はRMIレジストリのポート番号です。
JVM-MANAGEMENT-MIB.mib
ファイルがJava仮想マシンの標準MIBです。JVM MIBで公開される一部のオブジェクトは、64ビットです。これらのオブジェクトを表示するには、SNMP v2プロトコルを使用する必要があります。SNMP v1プロトコルを使用してJVM MIBを参照する場合、64ビット・オブジェクトは省略されます。
JVM MIBに含まれる64ビット・オブジェクトでは、SNMP v2プロトコルを使用する必要があります。SNMP v1を使ってJVM MIBを参照する場合、64ビット・オブジェクトはすべて省略されます。