JVM監視エージェントによる各種情報の取得
それでは、HeapStatsを実際に試してみましょう。まずはJVM監視エージェントで、JVMの各種情報を取得します。
設定
JVM監視エージェントは、デフォルトで/etc/heapstatsに配置されたheapstats.confに設定された内容に従って動作します。主な設定項目は次のとおりです。これら以外の設定項目については、デフォルト設定ファイル内のコメント、またはHeapStatsコミュニティサイトをご覧ください。
| 項目 | デフォルト値 | 説明 |
|---|---|---|
| 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監視エージェント開始時のメッセージが出力されます。
