jstatd [ options ]
options
jstatd ツールは、計測された HotSpot Java 仮想マシン (JVM) の作成と終了を監視し、ローカルシステム上で実行している Java 仮想マシンに、リモート監視ツールが接続できるようにするためのインタフェースを提供する RMI サーバーアプリケーションです。
jstatd サーバーでは、ローカルホストに RMI レジストリが存在することが必要になります。jstatd サーバーは、デフォルトポートまたは -p port オプションで指定されたポート上の RMI レジストリに接続しようとします。RMI レジストリが見つからない場合、-p port オプションで指定されたポート、または -p port が省略されている場合は、デフォルト RMI レジストリにバインドされた jstatd アプリケーション内に、1 つの RMI レジストリが作成されます。内部 RMI レジストリの作成は、-nr オプションを指定することによって禁止することができます。
注: このユーティリティーはサポート対象外であり、将来の JDK のバージョンでは利用できなくなる可能性があります。現在、Windows 98 および Windows Me プラットフォームでは使用できません。
jstatd コマンドは次のオプションをサポートしています。
jstatd サーバーは、適切なネイティブアクセス権を持つ JVM のみを監視できます。したがって、jstatd プロセスは、ターゲット JVM と同じユーザー資格で実行されている必要があります。UNIX™ ベースのシステムにおける root ユーザーなどの一部のユーザー資格は、システム上の任意の JVM によってエクスポートされたインストゥルメンテーションへのアクセス権を持っていす。このような資格で実行されている jstatd プロセスは、システム上のすべての JVM を監視できますが、セキュリティー上の別の問題が起こります。
jstatd サーバーには、リモートクライアントの認証機能がありません。そのため、jstatd サーバープロセスを実行すると、jstatd プロセスがアクセス権を持つすべての JVM によるインストゥルメンテーションのエクスポートを、ネットワーク上のすべてのユーザーに公開することになります。この無防備な状態は、環境によっては望ましくない場合があるので、特に実稼働環境または安全でないネットワークでは、jstatd プロセスを起動する前に、ローカルセキュリティーポリシーを検討する必要があります。
jstatd サーバーは、ほかのセキュリティーマネージャーがインストールされていない場合には、RMISecurityPolicy のインスタンスをインストールします。そのため、セキュリティーポリシーファイルを指定する必要があります。ポリシーファイルは、デフォルトポリシー実装のポリシーファイルの構文に準拠する必要があります。
次のポリシーファイルでは、セキュリティー例外を発生せずに 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 の起動を表しています。
rmiregistry 2020& jstatd -J-Djava.security.policy=all.policy -p 2020
この例は、AlternateJstatdServerName の名前にバインドされた、ポート 2020 の外部 RMI レジストリを使用した jstatd の起動を表しています。
rmiregistry 2020& jstatd -J-Djava.security.policy=all.policy -p 2020 -n AlternateJstatdServerName
この例は、RMI レジストリが見つからない場合に RMI レジストリを作成しない jstatd の起動を表しています。この例では、RMI レジストリがすでに実行していると想定しています。実行していない場合は、該当するエラーメッセージが表示されます。
jstatd -J-Djava.security.policy=all.policy -nr
この例は、RMI ロギング機能を有効にした jstatd の起動を表しています。この方法は、トラブルシューティングまたはサーバー活動の監視に役立ちます。
jstatd -J-Djava.security.policy=all.policy -J-Djava.rmi.server.logCalls=true