読者です 読者をやめる 読者になる 読者になる

sugarlife's blog

Javaとか、http://twitter.com/sugarlife

「Java解析ツールバトル」に登壇しました & HeapStats の動かし方について #jjug

JJUG ナイト・セミナー 「Java解析ツールバトル」に HeapStats 陣営でコミッターとして参加してきました!

今回のJJUGでは、自分達の JVM に深く密着してパフォーマンスに心血を注いでいる HeapStats、最近 OSS 化された Java だけでなく SQL 実行計画まで総合的に診断する EndoSnipe、昨日の OracleJDK 7u40のリリースで公式に JDK に付属された Java Flight Recorder と twitter4j の開発者であるモデレータが過去に開発された 侍 の三つ巴でディスカッションを行いました。
数々のプロジェクトやサービスで利用されている Java だからこそ、障害や性能問題に悩まされる人の数も多いと思われます。障害解析の手助けになるツール、それも今回参加した3つの内2つは日本人によって開発されていることもあり、かなりの盛況ぶりだったと思います:)

自分達のHeapStatsの発表資料はSlideshareで公開しています。興味のある方はぜひご覧ください。


ディスカッションでは時間の関係上、駆け足での説明だったため、「HeapStats はどうやって動かすの?」という最初の一歩をもう少し詳しく補足していきたいと思います。

HeapStatsのインストール

HeapStats インストール条件

性能に心血を注いだ結果として、JVMに手を突っ込み、一部のコードをアセンブラ化している等が原因で、HeapStatsを動かすためには以下の環境である必要があります

  • HotSpotであること
    • OpenJDK 6以降, あるいは OracleJDK 6以降
    • OpenJDK の場合は debuginfo パッケージもインストールする必要があります。
  • x86 または AMD64Linux であること
HeapStats インストール&動作方法

HeapStats をインストールするためにはバイナリからインストールする方法と、ソースからビルドする方法があります。今回はバイナリからインストールする方法を紹介します。

  • バイナリをここから取得してインストールする。
    • $ rpm -ivh heapstats-agent-[version].[CPU命令セット].[Linux dist].[アーキテクチャ].rpm
    • CPU命令セットの部分は解らない場合は何も記載されていない物を利用して下さい。
      • 利用している環境がサポートしているCPU命令セットを確認したい場合、"/proc/cpuinfo" の "flags" を見ることで確認ができます。
      • avxが書かれている場合はavxを、avxはないがsse4が書かれている場合はsse4を、それ以外は無印を利用するのがお勧めです。
    • Linux dist の fc は Fedora, el は RedHat Enterprise Linux を指します。
  • 監視させたい Java プログラムの起動オプションに以下を追加して実行する。
    • -agentlib:heapstats
    • 既に動作している Java プロセスに対してアタッチする場合は こちら を確認して下さい。
  • 実行ディレクトリに heapstats.csv, heapstats.dat が出力される。
    • analyzer を利用して可視化が行えます。
    • 出力フォルダは設定ファイル /etc/heapstats/heapstats.conf (デフォルト) を編集することで変更できます。

以上で HeapStats は実行している Java プロセスを常時監視しつつ各種情報を取得し、故障発生時には解析に必要な情報を根こそぎ取得するようになります!

HeapStatsの各種設定やアナライザによる可視化は公式サイトをご確認下さい。日本語サイトも準備されています!