CodeZine(コードジン)

特集ページ一覧

知らないなんてもったいない! 障害発生の原因を洗い出すOSSのJavaVM解析支援ツール「HeapStats」を使ってみよう

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2014/12/19 14:00

目次

JVM監視エージェントによる各種情報の取得

 それでは、HeapStatsを実際に試してみましょう。まずはJVM監視エージェントで、JVMの各種情報を取得します。

 

設定

 JVM監視エージェントは、デフォルトで/etc/heapstatsに配置されたheapstats.confに設定された内容に従って動作します。主な設定項目は次のとおりです。これら以外の設定項目については、デフォルト設定ファイル内のコメント、またはHeapStatsコミュニティサイトをご覧ください。

JVM監視エージェントの主な設定項目
項目 デフォルト値 説明
file heapstats_snapshot.dat Javaヒープ情報が格納されたデータ(スナップショット)ファイル名
heaplogfile heapstats_log.csv 収集ログ(各種統計情報)ファイル名
archivefile heapstats_analyze.zip 障害発生時に取得するアーカイブファイル名
rank_order delta スナップショット取得時にクラス別に実行するランキング計算やアラート出力の根拠を指定する。
delta:前回のスナップショットからの差分(増分)
usage:スナップショット取得時点でのJavaヒープ占有量
log_interval 300 統計情報の取得間隔を秒単位で設定する。
ゼロを設定した場合はheaplogfileで設定したファイルへの出力が無効になる

 

 基本的にデフォルトの設定で問題ありませんが、JVM監視エージェントが出力する各ファイルの配置先(file、heaplogfile、archivefile)は、監視対象であるJavaアプリケーションのログ保存先と一緒にするなど、管理しやすい場所に変更することをお勧めします。

 

アタッチ

 Javaアプリケーションの各種情報を取得するためには、JVM監視エージェントをアタッチする必要があります。アタッチ方法には、次の2つの方法が準備されています。

  • Java起動オプションによるアタッチ
  • 実行中のJavaアプリケーションへのオンデマンドアタッチ

 どちらの方法でも、アタッチに成功すると前節で動作確認した際に表示されたメッセージが標準出力に表示され、JVM監視エージェントはJavaアプリケーションやシステムリソースの各種情報を常時収集し、前節で設定したファイルへ各種情報を出力するようになります。

 

Java起動オプションによるアタッチ

 Javaアプリケーション起動時(javaコマンド実行時)からJVM 監視エージェントをアタッチするには、javaコマンドに-agentlibまたは-agentpathオプションのいずれかを付加します。

-agentlib:heapstats[=設定ファイル]
[=設定ファイル]を指定しなかった場合は、デフォルトの設定ファイル(/etc/heapstats/heapstats.conf)が読み込まれます。

-agentpath:<libheapstats.soへのフルパス>[=設定ファイル]
アタッチするJVM監視エージェントの共有ライブラリ(libheapstats.so)をフルパスで指定。複数のバージョンのJVM監視エージェントを利用する場合や、ソースコードからビルドしてインストールした場合に利用します。

 

オンデマンドアタッチ

 JVM監視エージェントはJavaのAttach APIを用いた動的アタッチも可能です。既に実行中のJavaアプリケーションの情報を収集するために、JVM監視エージェントをアタッチしたい場合に便利です。

 以下のコマンドによりオンデマンドアタッチが行えます。

# /etc/heapstats/attachjvm.sh heapstats(またはlibheapstats.soへのフルパス) [設定ファイル]
Num Process-Info
  0 SampleJavaProcess
  1 AgentAttacher /usr/lib64/heapstats/libheapstats.so /etc/heapstats/heapstats.conf
Input attach target process-number:0
Attacher is succeeded.

 アタッチに成功すると「Attacher is succeeded.」が出力され、監視対象のJavaプロセスの標準出力にJVM監視エージェント開始時のメッセージが出力されます。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 久保田 祐史(クボタ ユウジ)

    日本電信電話株式会社 OSSセンタ所属。OpenJDKを中心とした OSS製品のテクニカルサポートを担当。パフォーマンス劣化からコア解析までなんでもござれの火消し役。 IcedTea Committer. JavaOne2014 Speaker. HeapStatsやJVMについて発表したりし...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5