この章では、診断コマンドを使用して実行中のOracle JRockit JVMプロセスとやり取りする方法について説明します。
診断コマンドを使用すると、ヒープ・レポートやガベージ・コレクションの活動レポートの出力などのタスクを実行したり、特定の冗長モジュールを有効化するように、JRockit JVMに対して指示できます。
この章の内容は以下のとおりです。
各診断コマンドの詳細は、『Oracle JRockitコマンドライン・リファレンス』の「診断コマンド」を参照してください。
実行中のJVMプロセスに対して診断コマンドを送信するには、次のような方法があります。
jrcmdを使用する方法。このコマンドライン・ツールは、所定のJRockit JVMプロセスに対してコマンドを送信します。
[Ctrl]+[Break]を押す方法。JVMはctrlhandler.act
ファイルを探し、その内部でコマンドを実行します。
JRockit管理コンソールを使用する方法。Oracle JRockit Mission Controlは、実行中のJRockit JVMプロセスに対して診断コマンドを送信します。
-Djrockit.ctrlbreak.enable<name>=<true|false>
(name
は診断コマンドの名前)システム・プロパティを使用すると、どの診断コマンドでも有効または無効にすることができます。run_class
ハンドラはデフォルトで有効になっていません。有効にするには次のように入力します。
-Djrockit.ctrlbreak.enablerun_class=true
jrcmd
はJRockit JDKに含まれるコマンド・ライン・ツールで、実行中のJVMプロセスに診断コマンドを送信するために使用できます。jrcmd
は、JDKアタッチ・メカニズムを使用してJVMとやり取りします。この節ではjrcmd
の概要について簡単に説明します。この項の内容は次のとおりです。
コマンドラインにjrcmd
を適切なパラメータとともに入力します。
例:
jrcmd <jrockit pid> [<command> [<arguments>]] [-l] [-f file] [-p] -h]
<jrockit pid>
は、アプリケーションを実行しているメイン・クラスのプロセスIDまたは名前のいずれかです。
[<
command> [<
arguments>]]
は任意の診断コマンドとそれに関連付けられた引数です。たとえば、version
、print_properties
、command_line
です。
-l
では、このプロセスで作成したカウンタが表示されます。これらのカウンタはOracleによる内部使用向けであり、公式にはサポートもドキュメント化もされていません。
-f
では、ファイル内のコマンドが読み取られて実行されます。
-p
では、ローカル・マシン上のJRockit JVMプロセスがリストされます。
-h
では、ヘルプが表示されます。
PIDが0の場合は、コマンドがすべてのJRockit JVMプロセスに送信されます。オプションを何も指定しなければ、デフォルトで-p
が設定されます。フライト・レコーダ固有の診断コマンドを実行中でPIDとして0を使用している場合、Recorderはアクティブのままではありません。
注意:
|
この項では、次のタスクについてjrcmd
を使用する例を説明します。
以下を実行して、マシンで実行中のすべてのJRockit JVMプロセスをリストします。
jrcmd
またはjrcmd
-p
を実行して、実行中のJRockit JVMをリストします。例:
> jrcmd -P 10064 Sleeper -Xverbose:memory -Xmx30m >
プロセスのPID(10064
)と、現在実行中のプログラム(Sleeper
)が表示されます。また、JVMの起動に使用したパラメータ(-Xverbose:memory -Xmx30m
)も表示されます。
4.2.2.1項「JRockit JVMプロセスをリストする」で識別したプロセスにコマンドを送信するには、次の操作を行います。
PIDを確認します。4.2.2.1項「JRockit JVMプロセスをリストする」(10064
)を参照してください。
jrcmd
をPIDおよびversion
コマンドとともに実行します。例:
> jrcmd 10064 version
これにより、JRockit JVMにversion
コマンドが送信されます。次のレスポンスが返されます。
Oracle JRockit(R) build R28.0.0-679-130297-1.6.0_17-20100312-2122-windows-x86_64, compiled mode GC mode: Garbage collection optimized for throughput, strategy: genparpar
複数のコマンドを記述した(ctrlhandler.act
のような)ファイルを作成して、すべてのコマンドを実行できます。次の手順に従います。
commands.txtという名前のファイルを作成して、以下を入力します。
version
timestamp
jrcmd
を使用してファイルを実行します。例:
> jrcmd 10064 -f commands.txt
システムは次のように応答します。
Oracle JRockit(R) build R28.1.0-102-137086-1.6.0_20-20100825-2121-windows-ia32, compiled mode GC mode: Garbage collection optimized for throughput, strategy: genparpar ==== Timestamp ==== uptime: 0 days, 02:41:21 time: Mon Sep 06 16:23:43 2010
実行中のすべてのJRockit JVMプロセスにコマンドを送信するには、PIDを0
に設定します。
jrcmd
の確認済みの制限jrcmd
を使用する際には、次の制限に留意してください。
LinuxまたはSolaris上のプロセスに対して診断コマンドを発行するには、Javaプロセスを実行しているのと同じユーザーとしてjrcmd
を実行する必要があります。
Windows上でjrcmd
を使用する場合は、Javaプロセスとjrcmd
を、同じWindowsステーションから実行する必要があります。JavaプロセスをWindowsサービスとして実行して、jrcmd
をデスクトップで実行すると、両者が2つの別個の環境で実行されているため機能しません。
JRockit JVMがルート・ユーザーとして起動してから、それより権限の弱いユーザーに変更されると、セキュリティ上の制限によってjrcmd
がプロセスと適切に通信できなくなります。
次の処理が可能です。
ルートで、実行中のプロセスをリストできます。
権限の弱いユーザーが、プロセスにコマンドを送信できます。
次の処理は不可能です。
ルートで、プロセスに対しコマンドを送信できません。どのコマンドも、Ctrl-Breakシグナルとして扱われ、かわりにスレッド・ダンプが出力されます。
権限の弱いユーザーは、実行中のJRockit JVMプロセスをリストできませんが、プロセスID (PID)がわかっていれば、jrcmd <pid> <command>
を使用してプロセスにコマンドを送信できます。
Windowsのデフォルトの一時ディレクトリ(java.io.temp)がFATファイル・システム上にある場合、jrcmd
はローカル・プロセスを見つけることができません。セキュリティ上の理由から、ローカルでの監視と管理のサポートは、Windowsのデフォルトの一時ディレクトリがファイルとディレクトリに対して権限の設定をサポートするファイル・システム上(たとえば、NTFSファイル・システム上)にある場合に限られます。これはアクセス制御が不十分なFATファイル・システムではサポートされません。
診断コマンドを実行するもう1つの方法は[Ctrl]+[Break]を押すことです。[Ctrl]を押しながら[Break]を押すと、JRockit JVMにより現在の作業ディレクトリ内でctrlhandler.act
(例4-1を参照)という名前のファイルが検索されます。ここでファイルが見つからない場合、JVMが含まれるディレクトリでファイルが検索されます。ここでもこのファイルが見つからない場合は、スレッド・ダンプの出力に戻ります。ファイルが見つかると、コマンド・エントリを検索してファイルを読み取ります。各コマンド・エントリによって、対応する診断コマンドが呼び出されます。
例4-1 ctrlhandler.actファイル
set_filename filename=c:\output.txt append=true print_class_summary print_object_summary increaseonly=true print_threads print_threads nativestack=true print_utf8pool jrarecording filename=c:\myjra.xml time=120 nativesamples=true verbosity set=memory,memdbg,codegen,opt,sampling filename="c:\output" timestamp stop # ctrl-break-handler will stop reading the file after it finds # the stop key-word # # version - print JRockit version # # print_threads - the normal thread dump that lists all the currently # running threads and there state # # print_class_summary - prints a tree of the currently loaded classes # # print_utf8pool - print the internal utf8 pool # # print_object_summary - display info about how many objects of each # type that are live currently and how much size # they use. Also displays points to information # # jrarecording - starts a jrarecording # # verbosity - changes the verbosity level , not functional in ariane142_04 # # start_management_server - starts a management server # kill_management_server - shuts the management server down # (the managementserver.jar has to be in the bootclasspath for # these command to work) # #
ctrlhandler.act
ファイルでは、各コマンド・エントリはCtrl-Breakハンドラ名で始まり、その後ろにCtrl-Breakハンドラに渡される引数が続きます。引数は適切な形式(name=value
: たとえばset_filename filename=c:\output.txt append=true
など)で指定する必要があります。プロパティのデータ型として使用できるのは、文字列、整数およびブール値です。
Ctrl-Breakの機能を無効にするには、次のオプションを使用します。
-Djrockit.dontusectrlbreakfile=true
利用可能なコマンドに関するヘルプを出力するには、help
コマンドを使用します。利用可能なすべてのコマンドが出力されます。
各診断コマンドの詳細は、『Oracle JRockitコマンドライン・リファレンス』の「診断コマンド」を参照してください。