Table of Contents
1 利用可能なJavaバージョン
- Java SE Advanced (アドバンスド)
- Java SE Suite
2 ローカルJavaプロセスの監視
監視対象Javaプロセス起動時に以下のオプションを追加する。
- +UnlockCommercialFeatures:商用オプションロックを解除する
- +FlightRecorder:フライドレコーダー機能を有効化する
$ java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder ......
利用可能なコマンドを確認する、jcmdコマンドにプロセスIDを引数にして実行できる コマンド一覧を表示する。
$ jcmd <pid> help 7720: The following commands are available: JFR.stop ★レコーディング停止 JFR.start ★レコーディング開始 JFR.dump ★レコーディング内容をダンプする JFR.check VM.native_memory VM.commercial_features ManagementAgent.stop ManagementAgent.start_local ManagementAgent.start Thread.print GC.class_histogram GC.heap_dump GC.run_finalization GC.run VM.uptime VM.flags VM.system_properties VM.command_line VM.version help
jcmd <pid> JFR.start
でレコーディング開始、サブコマンドのヘルプは
jcmd <pid> help JFR.start
で見る。
$ ./jcmd 7720 JFR.start 7720: Started recording 4. No limit (duration/maxsize/maxage) in use. Use JFR.dump recording=4 filename=FILEPATH to copy recording data to file.
jcmd <pid> JFR.dump
でレコーディングファイルを取得する
$ ./jcmd 7720 JFR.dump recording=4 filename=/tmp/7720_002.jfr 7720: Dumped recording 4, 378.5 kB written to: /tmp/7720_002.jfr
jcmd <pid> JFR.stop
でレコーディング終了
$ ./jcmd 7720 JFR.stop 7720: Must provide either name or recording.
3 リモートJavaプロセスの監視
JMXポートを公開する、一番手軽な方法、jcmdコマンドを用いて、JMX remote port を臨時で空 けて接続する。
jcmd <pid> ManagementAgent.start jmxremote.port=7091 jmxremote.authenticate=false jmxremote.ssl=false
クライアントマシンのJava Mission Control(GUI)からJMX接続して、記録を行う。
4 有用なJavaオプション
4.1 -XX:StartFlightRecording
JRockit JVMで実行されるアプリケーションのフライト・レコーダ記録を開始するには、このオ プションを起動時に指定します。このオプションは、フライト・レコーダを実行時に開始する start_flightrecording診断コマンドと同等です。詳細は、Oracle JRockit JDKツールを参照し てください。
java -XX:+FlightRecorder -XX:FlightRecorderOptions=disk=true,maxchunksize=10M -XX:StartFlightRecording=filename=test.jfr myApp
4.2 -XX:+PrintFlagsFinal
JVM終了時にXXパラメータの値を標準出力にダンプする。
5 よく使うコマンド
商用機能の有効化とステータス確認 | jcmd <pid> VM.commercial_features |
JMX Agent のリモート起動 | jcmd <pid> ManagementAgent.start |
JMX Agent のローカル起動 | jcmd <pid> ManagementAgent.start_local |
JMX Agent の停止 | jcmd <pid> ManagementAgent.stop |
スレッド一覧の出力 | Thread.print |
concurrent のlock に関するスレッド | jcmd <pid> Thread.print -l |
JVM コマンドラインの表示 | VM.command_line |
System Properties の表示 | VM.system_properties |
該当VMに指定されたJVMオプションの表示 -all で全オプションと値の出力 | VM.flags |
GC.run | System.gc() の実行 |
ヒープダンプ出力(HPROF形式)-all を指定しない場合にはfull gc がリクエストされる | GC.heap_dump |