この問題は、たいていの場合、デフォルトの 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 レジストリのポート番号です。
Java 仮想マシン用の標準 MIB は、次の場所にあります。http://docs.oracle.com/javase/1.5.0/docs/guide/management/JVM-MANAGEMENT-MIB.mib。JVM MIB で公開される一部のオブジェクトは、64 ビットです。これらのオブジェクトを表示するには、SNMP v2 プロトコルを使用する必要があります。SNMP v1 プロトコルを使って JVM MIB を参照する場合、64 ビットオブジェクトは省略されます。
JVM MIB に含まれる 64 ビットオブジェクトでは、SNMP v2 プロトコルを使用する必要があります。SNMP v1 を使って JVM MIB を参照する場合、64 ビットオブジェクトはすべて省略されます。