今日は、JJUG主催のナイトセミナー「Java解析ツールバトル」が19:00〜21:00の時間帯で開催されました。本日バトルに参加したツールとパネリストは次の3つです。
今日は、パネルディスカッション形式でコーディネータが山本裕介氏です。
Java Flight Recorder
http://www.oracle.com/technetwork/java/javase/downloads/index.html
旧BEAシステムズのWebLogicサーバーで使われた独自のJavaVMであるJRockitに搭載されていた稼動情報収集機構のFlight Recorderと収集した情報を解析するMission Controlからなる解析ツールが、OracleのHotSpotVMに統合されつつあるものです。
統合作業は現在進行中で、目標は来年リリースされるJava SE 8ですが、さてどうでしょうか?
まもなく9月11日(日本時間)リリース予定のされたJava SE 7u40にも一部機能が搭載されるようです。
Flight Recorderが実行中の情報(JVM、OS、アプリケーション)を取得します。取得した情報は、Mission Controlツールで表示・解析します。なお、現時点でMisson ControlはEclipseベースアプリケーションとのことです。
デモを見ると、JVisualVMで取得できる各種情報(スレッド情報、メモリ情報、クラスヒストグラム情報)や、I/O情報(ソケット通信)などが採取できるようです。情報の表示時に閾値を超えたものだけ表示するといった仕掛けがあります。
オーバーヘッドは少なく、標準で3%程度のオーバーヘッド、詳細項目を採取したときに5〜10%というところだそうです。
Windowsでは、jmc.exe(Mission Control)、jfr.dllとjfr.jar(JFR API)といったファイルがあるとFlight Recorderが含まれていることになります。
なお、Flight Recorderは有償の機能で、商用利用するにはライセンスが必要となるそうです。
開発用途で個人なら無償との話もあったのですが、細部は確認が必要かも。
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
というオプションを指定します。
Flight Recorderのライセンスについて(2014-06-25追記)
次のURLにライセンスについてメモを記載しました。
http://torutk.com/projects/swe/wiki/Java_Flight_Recorder#%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
HeapStats
http://icedtea.classpath.org/wiki/HeapStats/jp
メモリリークとデッドロック検出に注力した解析ツールです。実行中に亜タッチしアナライザで可視化します。OS情報を含めて根こそぎ情報をとってきて可視化するそうです。
現時点では、x86のLinux上でのみ使えます。
クラスヒストグラムの取得(JDKの標準でも取得可能だが)は負荷が非常に大きいので、HeapStatsではガベージコレクションのマーキング処理にフックを入れて(HotSpot VMのネイティブコードでObjectクラスのvtableをいじって)、そこで情報を収集することで負荷を3.5〜4.5%に留めるよう工夫をしています。
デッドロックのリアルタイム検出では、SNMPでトラップするようになっています(デモのログではMIB情報がコンソールに出ていた)。
Java SE 7のG1GCには対応していますが、CMS、Java SE 6のG1GC、SerialGCには対応していない(制限がある)そうです。
なお、本日HeapStats 1.1がリリースされ、オブジェクト参照関係の情報、クラスローダー情報の収集解析が追加されました。
ダウンロード可能なバイナリの種類(追記)
先ほどダウンロードしようとしたら、バイナリがAVX, SSE4, 標準とCPUの機能によって3種類に分けられていることを知りました。
SSE4は、Core 2(Penryn以降)で搭載されたSIMD演算器
AVXは、Core i(Sandy Bridge以降)で搭載されたSIMD演算器
ENdoSnipe
データの収集に加えて、ENdoSnipeの最大の特色は診断機能です。他の解析ツールは、収集した情報の意味を理解して状況を把握し障害原因を調べる必要がありますが、ENdoSnipeは収集した情報を自動解釈し診断結果を提示します。例えば、SQLフルスキャン発生、メモリリーク発生などです。
運用中は少ない負荷で必要最小限の情報を収集する運用モードと、負荷は大きいが詳細情報を収集する開発モードを用意しています。バイトコードインストゥルメンテーション技術で情報を取っているので、前2つのツールに比べると負荷が大きいのかなと思います。
オブジェクトの参照は追えないそうです。
ENdoSnipeはWebアプリケーションとして作られているので、ツールのセットアップではPostgreSQLとtomcatの設定が必要です。
なお、本日ENdoSnipe 5.1β1がリリースされています。