ヘッダーをスキップ
Oracle® JRockit JDKツール・ガイド
リリースR28
B61440-03
  目次へ移動
目次

前
 
 

4 診断コマンドの実行

この章では、診断コマンドを使用して実行中のOracle JRockit JVMプロセスとやり取りする方法について説明します。

診断コマンドを使用すると、ヒープ・レポートやガベージ・コレクションの活動レポートの出力などのタスクを実行したり、特定の冗長モジュールを有効化するように、JRockit JVMに対して指示できます。

この章の内容は以下のとおりです。

各診断コマンドの詳細は、『Oracle JRockitコマンドライン・リファレンス』の「診断コマンド」を参照してください。

4.1 診断コマンドを実行するためのメソッド

実行中のJVMプロセスに対して診断コマンドを送信するには、次のような方法があります。

-Djrockit.ctrlbreak.enable<name>=<true|false>(nameは診断コマンドの名前)システム・プロパティを使用すると、どの診断コマンドでも有効または無効にすることができます。run_classハンドラはデフォルトで有効になっていません。有効にするには次のように入力します。

-Djrockit.ctrlbreak.enablerun_class=true

4.2 jrcmdの使用

jrcmdはJRockit JDKに含まれるコマンド・ライン・ツールで、実行中のJVMプロセスに診断コマンドを送信するために使用できます。jrcmdは、JDKアタッチ・メカニズムを使用してJVMとやり取りします。この節ではjrcmdの概要について簡単に説明します。この項の内容は次のとおりです。

4.2.1 jrcmdの使用方法

コマンドラインにjrcmdを適切なパラメータとともに入力します。

例:

jrcmd <jrockit pid> [<command> [<arguments>]] [-l] [-f file] [-p] -h]
  • <jrockit pid>は、アプリケーションを実行しているメイン・クラスのプロセスIDまたは名前のいずれかです。

  • [<command> [<arguments>]]は任意の診断コマンドとそれに関連付けられた引数です。たとえば、versionprint_propertiescommand_lineです。

  • -lでは、このプロセスで作成したカウンタが表示されます。これらのカウンタはOracleによる内部使用向けであり、公式にはサポートもドキュメント化もされていません。

  • -fでは、ファイル内のコマンドが読み取られて実行されます。

  • -pでは、ローカル・マシン上のJRockit JVMプロセスがリストされます。

  • -hでは、ヘルプが表示されます。

PIDが0の場合は、コマンドがすべてのJRockit JVMプロセスに送信されます。オプションを何も指定しなければ、デフォルトで-pが設定されます。フライト・レコーダ固有の診断コマンドを実行中でPIDとして0を使用している場合、Recorderはアクティブのままではありません。


注意:

jrcmdパラメータ文字列は256文字に制限されています。パラメータ文字列がこの制限を超えると、例外がスローされます。


4.2.2 jrcmdの例

この項では、次のタスクについてjrcmdを使用する例を説明します。

4.2.2.1 JRockit JVMプロセスをリストする

以下を実行して、マシンで実行中のすべてのJRockit JVMプロセスをリストします。

  • jrcmdまたはjrcmd -pを実行して、実行中のJRockit JVMをリストします。例:

    > jrcmd -P
    10064 Sleeper
            -Xverbose:memory -Xmx30m
    > 
    

    プロセスのPID(10064)と、現在実行中のプログラム(Sleeper)が表示されます。また、JVMの起動に使用したパラメータ(-Xverbose:memory -Xmx30m)も表示されます。

4.2.2.2 プロセスにコマンドを送信する

4.2.2.1項「JRockit JVMプロセスをリストする」で識別したプロセスにコマンドを送信するには、次の操作を行います。

  1. PIDを確認します。4.2.2.1項「JRockit JVMプロセスをリストする」(10064)を参照してください。

  2. 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
    

4.2.2.3 複数のコマンドを送信する

複数のコマンドを記述した(ctrlhandler.actのような)ファイルを作成して、すべてのコマンドを実行できます。次の手順に従います。

  1. commands.txtという名前のファイルを作成して、以下を入力します。

    • version

    • timestamp

  2. 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
    
  3. 実行中のすべてのJRockit JVMプロセスにコマンドを送信するには、PIDを0に設定します。

4.2.3 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ファイル・システムではサポートされません。

4.3 Ctrl-Breakハンドラの使用

診断コマンドを実行するもう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

4.4 ヘルプの出力

利用可能なコマンドに関するヘルプを出力するには、helpコマンドを使用します。利用可能なすべてのコマンドが出力されます。

各診断コマンドの詳細は、『Oracle JRockitコマンドライン・リファレンス』の「診断コマンド」を参照してください。