jstatd [ options ]
options
jstatdコマンドは、計測されたJava HotSpot VMの作成と終了をモニターし、ローカル・システム上で実行されているJVMに、リモート・モニタリング・ツールが接続できるようにするためのインタフェースを提供するRMIサーバー・アプリケーションです。
jstatdサーバーでは、ローカル・ホストにRMIレジストリが必要になります。jstatdサーバーはデフォルト・ポートで、または-p portオプションで指定したポートで、RMIレジストリに接続しようとします。RMIレジストリが見つからない場合、-p portオプションで指定されたポート、または-p portオプションが省略されている場合は、デフォルトRMIレジストリにバインドされたjstatdアプリケーション内に、1つのRMIレジストリが作成されます。内部RMIレジストリの作成は、-nrオプションを指定することによって中止できます。
-nr
-p port
-n rminame
-Joption
jstatdサーバーは、適切なネイティブ・アクセス権を持つJVMのみをモニターできます。したがって、jstatdプロセスは、ターゲットJVMと同じユーザー資格証明で実行されている必要があります。Solaris、LinuxおよびOS Xオペレーティング・システムにおけるrootユーザーなどの一部のユーザー資格証明は、システム上の任意のJVMによってエクスポートされたインストゥルメンテーションへのアクセス権を持っています。このような資格証明で実行されているjstatdプロセスは、システム上のすべてのJVMをモニターできますが、セキュリティ上の別の問題が起こります。
jstatdサーバーには、リモート・クライアントの認証機能がありません。そのため、jstatdサーバー・プロセスを実行すると、jstatdプロセスがアクセス権を持つすべてのJVMによるインストゥルメンテーションのエクスポートを、ネットワーク上のすべてのユーザーに公開することになります。この無防備な状態は、環境によっては望ましくない場合があるので、特に本番環境またはセキュアでないネットワークでは、jstatdプロセスを起動する前に、ローカル・セキュリティ・ポリシーを検討する必要があります。
jstatdサーバーは、他のセキュリティ・マネージャがインストールされていない場合には、RMISecurityPolicyのインスタンスをインストールします。そのため、セキュリティ・ポリシー・ファイルを指定する必要があります。ポリシー・ファイルは、http://docs.oracle.com/javase/8/docs/technotes/guides/security/PolicyFiles.htmlにある 「デフォルトのPolicyの実装とポリシー・ファイルの構文」に準拠している必要があります
次のポリシー・ファイルでは、セキュリティ例外を発生せずにjstatdサーバーを実行できます。このポリシーは、すべてのコード・ベースへのあらゆるアクセス権を認めるポリシーよりも自由度が低いですが、jstatdサーバーを実行するために最低限必要なアクセス権のみを認めるポリシーよりも自由度が高くなっています。
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
このポリシー設定を使用するには、このテキストをjstatd.all.policyというファイルにコピーし、次のようにjstatdサーバーを実行します。
jstatd -J-Djava.security.policy=jstatd.all.policy
より厳しいセキュリティを実施するサイトの場合、カスタム・ポリシー・ファイルを使用して、特定の信頼できるホストまたはネットワークにアクセスを制限することができます。ただし、このような方法は、IPアドレスの盗聴攻撃を受けやすくなります。セキュリティの問題について、カスタマイズしたポリシー・ファイルでも対処できない場合は、jstatdサーバーを実行せずに、jstatとjpsツールをローカルで使用することが最も安全な方法になります。
jstatdプロセスがエクスポートするインタフェースは、独自に開発したものであり変更される予定です。ユーザーおよび開発者は、このインタフェースへの書込みを行わないでください。
次に、jstatdコマンドの例を示します。jstatdスクリプトによって、サーバーはバックグラウンドで自動的に起動します。
この例は、内部RMIレジストリを使用したjstatdセッションの起動方法を表しています。この例では、デフォルトのRMIレジストリ・ポート(ポート1099)には、他のサーバーはバインドされていないと想定しています。
jstatd -J-Djava.security.policy=all.policy
この例は、外部RMIレジストリを使用したjstatdセッションの起動を表しています。
rmiregistry& jstatd -J-Djava.security.policy=all.policy
この例では、ポート2020の外部RMIレジストリを使用してjstatdセッションを起動します。
jrmiregistry 2020& jstatd -J-Djava.security.policy=all.policy -p 2020
この例では、ポート2020の外部RMIレジストリを使用して、AlternateJstatdServerNameにバインドされているjstatdセッションを起動します。
rmiregistry 2020& jstatd -J-Djava.security.policy=all.policy -p 2020 -n AlternateJstatdServerName
この例では、外部RMIレジストリがない場合に作成しないjstatdセッションを起動します。この例では、RMIレジストリがすでに実行されていると想定しています。RMIレジストリが実行されていない場合、エラー・メッセージが表示されます。
jstatd -J-Djava.security.policy=all.policy -nr
この例では、RMIロギング機能を有効化してjstatdセッションを起動します。この方法は、トラブルシューティングまたはサーバー活動のモニタリングに役立ちます。
jstatd -J-Djava.security.policy=all.policy -J-Djava.rmi.server.logCalls=true