Java仮想マシン(JVM)をモニターし、リモート・モニタリング・ツールをJVMに接続できるようにします。このコマンドは試験的なものであり、サポート対象外になっています。
jstatd
コマンドは、計測されたJava HotSpot VMの作成と終了をモニターし、ローカル・システム上で実行しているJava仮想マシンに、リモート・モニター・ツールが接続できるようにするためのインタフェースを提供するRMIサーバー・アプリケーションです。
jstatd
サーバーには、ローカル・ホスト上のRMIレジストリが必要です。jstatd
サーバーは、デフォルト・ポートまたは-p
port
オプションで指定したポート上のRMIレジストリに接続しようとします。RMIレジストリが見つからない場合は、-p
port
オプションで指定されたポート(-p
port
オプションが省略されている場合はデフォルトのRMIレジストリ・ポート)にバインドされたjstatd
アプリケーション内に、1つのRMIレジストリが作成されます。内部RMIレジストリの作成は、-nr
オプションを指定することによって停止できます。
既存のRMIレジストリが見つからない場合、jstatd
プロセス内に内部RMIレジストリを作成しないようにします。
RMIレジストリがあると予想されるポート番号です。見つからない場合は、-nr
オプションが指定されていなければ作成されます。
RMIレジストリにおいて、リモートRMIオブジェクトがバインドされる名前です。デフォルト名はJStatRemoteHost
です。複数のjstatd
サーバーが同じホスト上で起動している場合、各サーバーのエクスポートしたRMIオブジェクトの名前は、このオプションを指定することによって、一意の名前にすることができます。ただし、そのようにする場合は、モニタリング・クライアントのhostid
およびvmid
文字列にその一意のサーバー名を含める必要があります。
JVMにoption
(Javaアプリケーション起動ツールのリファレンス・ページに記載されているoptions
のいずれか)を渡します。たとえば、-J-Xms48m
と指定すると、スタートアップ・メモリーは48Mバイトに設定されます。java
(1)を参照してください。
jstatd
サーバーは、適切なネイティブ・アクセス権を持つJVMのみをモニターできます。したがって、jstatd
プロセスは、ターゲットJVMと同じユーザー資格で実行されている必要があります。Solaris、LinuxおよびOS Xオペレーティング・システムにおけるrootユーザーなどの一部のユーザー資格証明は、システム上の任意のJVMによってエクスポートされたインストゥルメンテーションへのアクセス権を持っています。このような資格で実行されているjstatd
プロセスは、システム上のすべてのJVMをモニターできますが、セキュリティ上の別の問題が起こります。
jstatd
サーバーには、リモート・クライアントの認証機能がありません。そのため、jstatd
サーバー・プロセスを実行すると、jstatd
プロセスがアクセス権を持つすべてのJVMによるインストゥルメンテーションのエクスポートを、ネットワーク上のすべてのユーザーに公開することになります。この無防備な状態は、環境によっては望ましくない場合があるので、特に本番環境または安全でないネットワークでは、jstatd
プロセスを起動する前に、ローカル・セキュリティ・ポリシーを検討する必要があります。
jstatd
サーバーは、他のセキュリティ・マネージャがインストールされていない場合には、RMISecurityPolicy
のインスタンスをインストールします。そのため、セキュリティ・ポリシー・ファイルを指定する必要があります。ポリシー・ファイルは、次の「デフォルトのPolicyの実装とポリシー・ファイルの構文」に準拠する必要があります。http://docs.oracle.com/javase/jp/8/technotes/guides/security/PolicyFiles.html
次のポリシー・ファイルでは、セキュリティ例外を発生させずに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
この例では、AlternateJstatdServerName
にバインドされたポート2020上の外部RMIレジストリを使ってjstatd
セッションを開始しています。
rmiregistry 2020& jstatd -J-Djava.security.policy=all.policy -p 2020 -n AlternateJstatdServerName