トラブルの発生時に利用するツール

システム開発の現場では予期しないトラブルが付き物だ。Javaの場合、ヒープメモリやGCに関するトラブルが発生することが多い。この場合、GCログやヒープダンプを解析することで原因の特定を試みることになる。今回はこれらのトラブルが発生した場合に役立つツールを紹介する。

JDK標準ツール「jconsole」

jconsoleはJDKに標準で付属するJMXクライアントツールで、Java VMのリソースの利用状況を監視するのによく利用される。JDKインストールディレクトリのbinディレクトリ配下のjconsole.exeで起動することができ、ローカルで動作しているプロセスのほか、リモートで動作しているJava VMに接続することも可能だ。JDKのインストールディレクトリ直下のbinディレクトリにあるjconsole.exe(Windowsの場合)で起動することができる。

図1 jconsole

アプリケーションにメモリリークの疑いがある場合、まずはjconsoleでメモリの使用量を監視するといいだろう。また、JDKにはこのほかにも以下のようなコマンドが用意されている。覚えておくとリソース監視や障害解析などの際に役立てることができるはずだ。

JDK付属のコマンド

コマンド 説明
jps Java VMのプロセスIDを表示
jstat Java VMのGC状態などを監視
jstack Java VMのスタック情報を取得
jmap Java VMのヒープダンプなどを取得
jhat ヒープダンプを解析するためのツール

統合管理ツール「VisualVM」

VisualVMはjconsole同様JDKに標準で付属するツールで、Java VMの統合管理ツールだ。標準でJava VMのモニタリング機能やプロファイル機能などが提供されており、その他の機能をプラグインで追加することもできるようになっている。JDKのインストールディレクトリ直下のbinディレクトリにあるjvisualvm.exe(Windowsの場合)で起動することができる。

図2 VisualVM

jconsoleよりも高機能なツールとなっているため、こちらを利用する機会のほうが多いかもしれない。ただし、JDK 1.6.0 update 7で導入されたツールであるため、それ以前のバージョンのJDKでは標準では添付されていないことに注意してほしい。

VisualVMはjava.netで開発されているため、古いバージョンのJDKを使用している場合はjava.netのプロジェクトサイトから別途ダウンロードして利用するといいだろう。また、java.netのプロジェクトサイトからはEclipseやIntelliJ IDEAにVisualVMを統合するためのプラグインも入手することができる。

ヒープダンプ解析の決定版「Eclipse Memory Analyzer」

Eclipse Memory AnalyzerはJava VMのヒープダンプを解析するためのツールだ。Eclipseプラグインのほか、スタンドアロンで動作可能なバージョンが提供されている。

図3 Eclipse Memory Analyzer

まずは以下のようにjmapコマンドでヒープダンプを出力する。

jmap -dump:format=b <プロセスID>

カレントディレクトリにbeap.binというファイルが出力されるので、これをEclipse Memory Analyzerに読み込めば図3のように解析結果がビジュアルに表示される。

JDKにはjhatコマンドというヒープダンプをブラウズするためのツールが同梱されているが、これと比べるとEclipse Memory Analyzerは非常に使いやすい。ヒープダンプを解析する場合はぜひ活用したいツールだ。

スレッドダンプ、GCログの解析に「侍」

はスレッドダンプやGCログを解析するためのツールだ。起動すると表示されるウィンドウにログファイルをドラッグ&ドロップすることでファイルの監視が開始され、リアルタイムに解析が行われる。スタンドアロンのSwingアプリケーションでダウンロードしたJARファイルをダブルクリックするだけで実行可能だが、Java Web Startでも利用可能となっており手軽に試すことができる。

図4 侍

まとめ

今回紹介したツールはJavaでの開発時に必須のツールというわけではなく、そうそう頻繁に利用する類のツールでもないが、いざトラブルが発生したときに知っていると役立つことは間違いない。こういったツールの存在だけでも覚えておくといいだろう。