21
jcmd をををををををを 羽羽羽 羽羽 1

jcmd をさわってみよう

Embed Size (px)

DESCRIPTION

日本Javaユーザーグループ JJUG ナイトセミナー 2 月 27 日(水) http://www.java-users.jp/?p=309

Citation preview

Page 1: jcmd をさわってみよう

jcmd をさわってみよう

羽生田 恒永

1

Page 2: jcmd をさわってみよう

2

ここで示されている見解は私個人のものであり、所属会社の見解を反映したものではありません

Page 3: jcmd をさわってみよう

3

目次

• 自己紹介• jcmd の紹介• デモ• まとめ

Page 4: jcmd をさわってみよう

4

自己紹介

• 羽生田 恒永(はにゅうだ・つねなが)

• 所属:日本オラクル株式会社

• ミドルウェアのコンサルティング業務を担当– Oracle WebLogic Server– Oracle Coherence– Oracle Application Server…

Page 5: jcmd をさわってみよう

5

jcmd をさわってみよう

• jcmd とは– Java 7u4 HotSpot から利用できるようになった診

断ツールの一種– JRockit で提供されていた JRCMD の HotSpot 版

– 主な機能• jps 相当のプロセスリスト出力• PerfCounter.print による性能情報スナップ

ショット出力• スレッドダンプ出力• ヒープダンプ出力• Java FlightRecorder との連携

Page 6: jcmd をさわってみよう

jcmd をさわってみよう

• 使い方–場所• JDK の bin 以下にあります• <JDK install dir>\bin\jcmd.exe

6

Page 7: jcmd をさわってみよう

jcmd をさわってみよう

– コマンド• $ jcmd–起動ノード上で稼働している JVM の一覧が出

力される• $ jcmd <pid> help–対象ノードで利用可能なコマンド一覧が出力

される• $ jcmd <pid | main class> <command |

PerfCounter.print | -f filename>– pid を指定してコマンド実行– PerfCounter.print : jinfo, jstat などで取得可

能な情報を一度に出力– -f : file 名でファイルに記載されたコマンドを

実行可能7

Page 8: jcmd をさわってみよう

DEMO #1

8

Page 9: jcmd をさわってみよう

jcmd をさわってみよう

• コマンド一覧( JMX 他)

9

コマンド名 impact

機能

VM.commercial_featuresNo 商用機能の有効化と

ステータス確認

ManagementAgent.stop No JMX Agent の停止

ManagementAgent.start_localNo JMX Agent のローカル起

ManagementAgent.startNo JMX Agent のリモート起

Page 10: jcmd をさわってみよう

jcmd をさわってみよう

• コマンド一覧(スレッド)

10

コマンド名 impact 機能

Thread.print

Mediumスレッド数に依存

スレッド一覧の出力

-l で concurrent のlock に関するスレッド出力が可能

Page 11: jcmd をさわってみよう

jcmd をさわってみよう

• コマンド一覧( GC 1of2 )

11

コマンド名 Impact 機能

GC.class_histogram

Highヒープサイズとクラス数に依存

ヒープ上にあるクラスのインスタンス数とバイト数を表示-all で unreachable オブジェクトも表示

GC.heap_dump

Highヒープサイズに依存

ヒープダンプ出力( HPROF形式)-all を指定しない場合にはfull gc がリクエストされる

Page 12: jcmd をさわってみよう

jcmd をさわってみよう

• コマンド一覧( GC 2of2 )

12

コマンド名 Impact 機能

GC.run_finalizationMediumクラス数に依存

System#runFinalization() の実行

GC.run

Mediumヒープサイズとクラス数に依存

System.gc() の実行

Page 13: jcmd をさわってみよう

jcmd をさわってみよう

• コマンド一覧( VM 情報 1of2 )

13

コマンド名 impact 機能

VM.uptime

Low 該当 VM の起動時間出力(秒)-date で出力時間を併せて表示

VM.flags

Low 該当 VM に指定された JVM オプションの表示-all で全オプションと値の出力

Page 14: jcmd をさわってみよう

jcmd をさわってみよう

• コマンド一覧( VM 情報 2of2 )

14

コマンド名 impact 機能

VM.system_properties Low System Properties の表示

VM.command_line Low JVM コマンドラインの表示

VM.version Low バージョン情報の表示

help Low Help ドキュメントの表示

Page 15: jcmd をさわってみよう

jcmd をさわってみよう

• コマンド一覧( Java FlightRecorder 1of2 )

15

コマンド名 impact 機能

JFR.stop

Low Java FlightRecorder の記録を停止。ファイル名、 recording id などを指定

JFR.start

Low Java FlightRecorder の記録を開始。対象 VM 上で -XX:+UnlockCommercialFeatures および – XX:+FlightRecorder オプションが必要

Page 16: jcmd をさわってみよう

jcmd をさわってみよう

• コマンド一覧( Java FlightRecorder 2of2 )

16

コマンド名 impact 機能

JFR.dumpHigh 記録中の JFR のスナップショッ

トダンプを取得(記録は継続)

JFR.checkLow JFR の記録オプションの確認

Page 17: jcmd をさわってみよう

jcmd をさわってみよう

• ユースケース

–HPROF の動的取得•ただし heapdump のみ

– JMX remote port を臨時で空けて接続• JMX オプション無しの JVM プロセスに対して動的にアタッチ

17

Page 18: jcmd をさわってみよう

DEMO #2

18

Page 19: jcmd をさわってみよう

jcmd をさわってみよう

• JMX リモートポートを空ける– $ jcmd <pid> ManagementAgent.start

jmxremote.port=<port#> jmxremote.authenticate=false jmxremote.ssl=false

※authenticate, ssl 設定解除はセキュリティ上の問題があるので注意してください

19

Page 20: jcmd をさわってみよう

jcmd をさわってみよう

• jcmd は…– JDK に付属する Java VM 診断ツール– jps, jstat など既存ツールで取得していた情

報を 1 コマンドに集約• ただし、用途別に使い分けるのが良いで

しょう–さらなる機能拡張、 Java FlightRecorder

との連携強化に期待• 結論–まだまだです!

20

Page 21: jcmd をさわってみよう

jcmd をさわってみよう

• QA– Java 6 など古いバージョンにアタッチでき

るか?• できません( JDK7u4 以降のみ)

– Java Mission Control がバンドルされている JDK の入手方法は?• My Oracle Support からダウンロードし

てください

21