避けるべき状況ですが、残念なことにこのようなことは珍しくありません。解析に必要な情報を漏らさず取得するためには、サービス開始前に入念な準備が必要ですが、現実にはそこまで時間をかけられない場合もあり、往々にして準備不足となる場合があるからです。
こういった不幸な状況を防ぐ手段の1つとして、本稿では「HeapStats」というツールを利用した障害解析方法を紹介します。
HeapStatsとは
「HeapStats」は、NTT OSSセンタが開発を行い2013年にOSS(オープンソースソフトウェア)として公開したJavaVM障害解析支援ツールです。 Javaアプリケーションにおけるメモリ不足(OutOfMemoryError)やデッドロックといった障害を素早く解決することを目的として開発されました。特に、Javaヒープメモリ内の状態など、従来は高い負荷をかけて取得する必要があった情報を、低オーバーヘッドで自動的に取得できるという特徴を備えており、様々な商用サービスや検証環境で利用されています。また、Javaに関する大規模な国際会議であるJavaOne2014でも発表を行っています。
HeapStatsは「JVM監視エージェント」と「アナライザ」という2つのソフトウェアから構成されています。
JVM監視エージェントは、Javaのヒープやシステムリソースの利用状況を常時収集するなど、解析に必要な情報を取り漏らさず収集します。これにより、冒頭のような情報不足で障害が再び発生するまで待つ必要がなくなります。また、障害の予兆や発生をリアルタイムに検出・通知できるので、障害が発生したときにも柔軟に対応できます。収集した情報は、アナライザによってグラフィカルに表示されるため、素早く直感的に障害を解析することができます。
HeapStatsのシステム要件
本稿執筆時(2014年12月)におけるJVM監視エージェントならびにアナライザのハードウェア要件、ソフトウェア要件は次のとおりです。
JVM監視エージェント
- CPU:Intel Pentium 4以降、または互換プロセッサ
- メモリ:1GB以上(2GB以上を推奨)
- ハードディスク:128MB以上の空き容量
- OS:x86/x86_64版Linux
- Java:OpenJDK 6以降[1]または、Java SE 6以降
-
ライブラリ:PCRE 6.6以降
Net-SNMP 5.3.1以降
[1] OpenJDKを利用する場合には、OpenJDKと同一バージョンのdebuginfoパッケージも必要です。
アナライザ
- CPU:利用OS・JDKの推奨スペック
- メモリ:2GB以上
- ハードディスク:256MB以上の空き容量
- ディスプレイ:解像度1,024×768以上、HighColor(65,536色)以上
-
OS:X Window SystemなどのGUIが動作するLinuxやOS X(Mac)
または、Microsoft Windows Vista以降 - Java:OpenJDK6以降、または、Java SE 6以降
-
各種ライブラリ:JFreeChart 1.0.13以降
JGraphX 2.5以降[2]
[2] JavaにJDK6を利用している場合には、JDK6に対応したJGraphX(2.5.0.3以前のバージョン)を利用する必要があります。