診断ガイド

     前  次    目次     
コンテンツの開始位置

診断コマンドの実行

診断コマンドは、実行中の BEA JRockit プロセスとやり取りするために使用します。診断コマンドを使用すると、JRockit JVM に対して、たとえばヒープ レポートやガベージ コレクションの活動レポートの表示、または特定の冗長モジュールオン/オフの切り替えが行えます。この章では、診断コマンドの実行方法を説明し、利用可能なコマンドの一覧を示します。この節の内容は以下のとおりです。

 


診断コマンドの概要

診断コマンドを使用すると、実行中の JRockit JVM プロセスとやり取りすることができます。診断コマンドによって、たとえば、ヒープ レポートの表示や、冗長モジュールの有効化または無効化を指示できます。

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

-Djrockit.ctrlbreak.enable<name>=<true|false> (name は診断コマンドの名前) システム プロパティを使用すると、どの診断コマンドでも有効または無効にすることができます。以下の 2 つのハンドラはデフォルトで禁止になっており、有効にする必要があります。

次に例を示します。

-Djrockit.ctrlbreak.enablerun_class=true

 


jrcmd の使用

jrcmd は JRockit JDK に含まれるコマンド ライン ツールで、診断コマンドを実行中の JVM プロセスに送信するために使用できます。この節では jrcmd の概要について簡単に説明します。以下の内容について説明します。

jrcmd が JRockit JVM とやり取りする仕組み

jrcmd は小さな C ライブラリである JRIPC を使用して、実行中の JRockit JVM プロセスとやり取りします。JRIPC には以下の基本機能があります。

jrcmd の使用方法

jrcmd を使用するには、コマンドラインに jrcmd を適切なパラメータと共に入力します。以下に例を示します。

jrcmd <jrockit pid> [<command> [<arguments>]] [-l] [-f file] [-p] -h]

この例の説明は次のとおりです。

PID が 0 の場合は、コマンドがすべての JRockit JVM プロセスに送信されます。オプションを何も指定しなければ、デフォルトで -p がセットされます。

jrcmd の例

ここでは、jrcmd を使用した例をいくつか紹介します。内容は以下の通りです。

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

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

  1. jrcmd または jrcmd -p を実行して、実行中の JRockit JVM をリストします。以下に例を示します。
  2. > jrcmd -P
    10064 Sleeper
    -Xverbose:memory -Xmx30m
    >

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

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

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

  1. JRockit JVM プロセスをリストする」で表示された PID (10064) を確認します。
  2. jrcmd を PID および version コマンドと一緒に入力します。以下はその例です。
  3. > jrcmd 10064 version

    これにより、JRockit JVM に version コマンドが送信されます。以下の応答が返ってきます。

    Oracle WebLogic JRockit(R) Virtual Machine build 9.9.9-1.5.0-Jun  9 2004-13:52:53-<internal>, Native Threads, GC strategy: parallel

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

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

  1. commands.txt という名前のファイルを作成して、以下を入力します。
    • version
    • timestamp
  2. jrcmd を使用してファイルを実行します。以下に例を示します。
  3. > jrcmd 10064 -f commands.txt

    システムは次のように応答します。

    Oracle WebLogic JRockit(R) Virtual Machine build 9.9.9-1.5.0-Jun  9 2004-13:52:53-<internal>, Native Threads, GC strategy: parallel
    ==== Timestamp ====  uptime: 0 days, 00:05:04 time: Fri Jun 11 14:28:31 2004
  4. 実行中のすべての JRockit JVM プロセスにコマンドを送信するには、PID 0 を使用します。

jrcmd の確認済みの制限

jrcmd を使用する際には、以下の制限に留意してください。

 


Ctrl-Break ハンドラ

診断コマンドを実行するもう 1 つの方法は〔Ctrl〕+〔Break〕を押すことです。〔Ctrl〕+〔Break〕を押すと、JRockit JVM は現在の作業ディレクトリ内で ctrlhandler.act (コード リスト 21-1 を参照) という名前のファイルを検索します。そこにファイルが見つからない場合は、JVM のディレクトリを調べます。そこにもファイルが見つからない場合は、通常のスレッド ダンプの表示に戻ります。ファイルが見つかった場合は、ファイルからコマンド エントリを読み込みます。各コマンド エントリは、対応する診断コマンドを呼び出します。

コード リスト 21-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 は
# stop キーワードを検出するとファイルの読み込みを停止する
#
# version - JRockit のバージョンを出力する
#
# print_threads - 通常のスレッド ダンプ
# 現在実行中のすべてのスレッドとその状態を出力する
#
# print_class_summary - 現在ロードされているクラスのツリーを出力する
#
# print_utf8pool - 内部の utf8 プールを出力する
#
# print_object_summary - 現在生存しているオブジェクトの数 (型ごと) と、
# それらが使用するサイズの情報を出力する
# また、情報へのポイントも出力する
#
# jvmpi_datadump
#
# jvmpi_datareset
#
# jrarecording - jrarecording を起動する
#
# verbosity - 冗長レベルを変更する。ariane142_04 では機能しない
#
# start_management_server - 管理サーバを起動する
# kill_management_server - 管理サーバを終了する
# (これらのコマンドを使用するためには、managementserver.jar を
# ブート クラスパスに含める必要がある)
#
#

ctrlhandler.act ファイルでは、各コマンド エントリは Ctrl-Break ハンドラ名で始まり、その後ろに Ctrl-Break ハンドラに渡される引数が続きます。引数はプロパティ形式 (名前 = 値。たとえば set_filename filename=c:\output.txt append=true など) で指定する必要があります。プロパティのデータ型として使用できるのは、文字列、整数、またはブール値です。

Ctrl-Break の機能を無効にするには、次のコマンドを設定します。

-Djrockit.dontusectrlbreakfile=true.

 


利用可能な診断コマンド

表 21-1 に、現在利用可能な診断コマンドを示します。

表 21-1 既存の Ctrl-Break ハンドラ
コマンド
説明
set_filename filename=<file> [append=true]
このコマンドの後ろに続くすべてのコマンドが出力に使用するファイルを設定する。1 つのファイル内に複数の set_filename コマンドを使用できる。filename と append (省略可能) の 2 つの引数を受け取る。append には出力をファイルに追加するか、それとも上書きするかを指定する。デフォルトでは、stderr ファイルに上書きされる。
timestamp
タイムスタンプを出力する。
version
JRockit JVM バージョンを出力します。
print_threads [nativestack=true] [jvmmonitors=true]
通常のスレッド ダンプを出力する。
  • nativestack=true を指定すると、Java トレースの他に C レベルのスタックトレースが出力される。
  • jvmmonitors=true を指定した場合も、JRockit JVM 内部のネイティブ ロック (登録されているもの) の状態情報および待機キューが出力される。また、-XXnativeLockProfiling=true を指定すると、ネイティブ ロック プロファイルの統計データ (acquired/contended/tryfailed) が出力される。
verbosity [args=<components>] [filename=<file>]
冗長レベルを変更する。通常は -Xverbose で指定。このハンドラは R25 では使用できない。
command_line
JRockit JVM の起動に使用したコマンドラインを出力する。
print_object_summary
JRockit Memory Leak Detector ユーザーズ ガイド』 (JRockit Mission Control 1.0 の場合) または『Memory Leak Detector オンライン ヘルプ』(Oracle JRockit Mission Control 2.0 以降のユーザの場合) を参照。
print_class_summary
ロードされたすべてのクラスを出力する。
print_utf8pool
すべての UTF8 文字列を出力する。
print_memusage
JRockit JVM のプロセスが確保していると OS が判断したすべてのメモリを出力する。また、各サブシステムによって同様に判断されたメモリも出力される。
oom_diagnostics

注意 : このコマンドは JRockit JVM R26.3 以前のバージョンでしか使用できない。

OutOfMemoryDiagnostics を出力する。set_filename-Djrockit.oomdiagnostics.filename の両方が設定されている場合は、後者が優先する。
このコマンドは JRockit JVM R26.4 で非推奨になったため、heap_diagnostics を使用する。
heap_diagnostics
ヒープの診断を出力する。出力は Ctrl-Break ハンドラの出力ストリームに書き込まれ、-Djrockit.oomdiagnostics.filename プロパティは無視される。このコマンドは JRockit JVM R26.4 以降のバージョンでしか使用できない。
heapreport
C-Heap に、JVM のネイティブ メモリ割り当てに関するレポートを出力する。HEAP_TRACE を定義して実行している場合のみ使用可能。
gcreport
実行中の、現時点までのガベージ コレクションの処理に関する包括的な報告の概要を出力する。アプリケーション実行の最後に出力される -XgcReport と同じ情報を動的に出力する。これを可能にするために、-XgcReport オプション フラグを起動コンフィグレーションに指定する必要がある。指定しないと正しく実行されない。
jrarecording [filename=<file>] [time=<time>] [nativesamples=true]
JRA 記録を開始する。詳細については、「JRockit JVM Mission Control 1.0 での JRA 記録の作成」を参照してください。
run_optfile [filename=<file>]
start_management_server
管理サーバ (実際には、接続が確立されるとサーバを起動するリスン中のソケット) を起動する。このコマンドを使用するためには、managementserver.jar をブート クラスパスに含める必要がある。
kill_management_server
管理サーバを停止する (実際には、リスン中のソケットを終了する)。この名前が stop_management_server でないのは、「stop」は act ファイルの解析の停止のために予約されたキーワードであるためである。このコマンドを使用するためには、managementserver.jar をブート クラスパスに含める必要がある。
lockprofile_print
ロック プロファイル カウンタの現在の値を出力する。ロック プロファイリングを有効にするには -Djrockit.lockprofiling を指定する。
lockprofile_reset
ロック プロファイル カウンタの現在の値をリセットする。ロック プロファイリングを有効にするには -Djrockit.lockprofiling を指定する。
print_exceptions [stacktraces=all/true/false] [exceptions=all/true/false]
例外の出力を有効または無効にする (「-Xverbose」を参照)。例外の出力を完全にオフにするには、stacktraces = true でオンにした場合でも、exceptions = false を設定する必要がある。
force_crash
Oracle JRockit JVM をクラッシュ/ダンプさせます。
run_class [class=<classname>] [daemon=<true|false>]
Runnable インタフェースを実装するすべてのクラスを実行する。次を使用して有効にする必要がある。
-Djrockit.ctrlbreak.enablerun_class=true
クラス名は、次の例ように、スラッシュ (/) を使用してパッケージ名を分離する必要があることに注意する。
jrcmd <pid> run_class class=java/lang/Thread
memprof [sampleRate=<seconds>] [trendSize=<size>] [forceThreshold=<bytes>] [verboseResultStats=<true|false>] [skipSymbols=<symbolexcludelist>]
実行中のアプリケーションでメモリのプロファイリングを有効にする。メモリのプロファイリングは、メモリ リークなどの問題を診断する上で、非常に有用である。

 


ヘルプの出力

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


  ページの先頭       前  次