チューニングに使えるJava性能監視ツール

JavaVMを監視するツール群今回は、Java EEアプリケーションをチューニングする際に便利なツールを紹介します。JavaVMの状態を監視/レポートするツールは、フリー・ソフトウエアや製品を含め、いくつか提供されています。米Oracle(米Sun Microsystems)のJava環境にも、標

東 浩二(A-pZ)(監修:山田祥寛)

2011年3月25日 20:00

JavaVMを監視するツール群

今回は、Java EEアプリケーションをチューニングする際に便利なツールを紹介します。JavaVMの状態を監視/レポートするツールは、フリー・ソフトウエアや製品を含め、いくつか提供されています。米Oracle(米Sun Microsystems)のJava環境にも、標準で便利なツール群が付いています。本記事では、標準ツールであるjconsoleとjstatの2つを紹介します。

表1: 主なJavaVM監視/レポーティング・ツール

製品名特徴
侍タブ表示できるGUIのログ追跡ツール。ログ・ファイルから、VMのヒープ状況の解析やスレッド解析を行える。
Eclipse Memory AnalyzerIDE環境のEclipseで利用可能な、グラフィカル・メモリー解析プラグイン。単体テストから仮想サーバー上でのヒープ監視まで利用できる。ヒープ利用状況の円グラフ表示や、ガベージ・コレクション対象クラスの追跡など、多種多様なレポート機能を備える。
JProbeJava性能測定ツール。メソッドの実行時間、呼び出し回数をグラフィカルに表示、警告する。メモリー利用状況をグラフィカルに表示し、メモリー・リークの調査や、コード・カバレッジ*1調査も行う。
    [*1] コード・カバレッジ: アプリケーション内にあるメソッドの実行率のこと。コードは存在するが実行されていないクラスやメソッドを追跡するために利用する。

これらのほか、Oracle WebLogic Application Serverや、IBM WebSphereなどの統合アプリケーション・サーバー製品には、管理ツールの1つとして性能監視ツールが整備されています。

JavaVMをグラフィカルに監視するjconsole

JavaVMのメモリー使用状況などを参照/監視できるツールとして、Sun Java 5以降では、標準でいくつかの便利なツールが用意されています。その1つに、JavaVMの利用状況を監視した結果をリアルタイムで図示するjconsoleがあります。使い方は非常に簡単で、コマンド・プロンプトからコマンドを入力するだけで起動します。

C:\>jconsole [監視するJavaVMのプロセス番号]

起動時にプロセス番号を省略した場合は、現在起動しているJavaプロセスの一覧から選択できます。JavaVMのプロセス番号を調べるツールも用意されています。こちらは、コマンド・プロンプトで、以下のように入力すると起動します。

C:\>jps

例えば、Windows環境でEclipseを起動した状態で、EclipseからTomcat 6.0を起動させたケースを想定します。この状態でjpsを実行した結果は、以下のようになります。

C:\>jps
6284 Bootstrap
7512
6564 Jps

この状態にて、jconsoleでTomcat 6.0(=Bootstrap)プロセスを指定します。

C:\>jconsole 6284

プロセス番号を正しく指定すると、jconsoleが監視した結果のグラフが、図1のように表示されます。

図1: jconsoleの概要画面

図1: jconsoleの概要画面(クリックで拡大)

図中のグラフの意味は、以下の通りです。

【左上】: ヒープメモリの使用状況
  • 使用済み: 指定したJavaVMが実際に消費しているメモリーの量
  • 確定: ヒープで使用するように割り当てられた合計メモリー容量
  • 最大: 最大メモリー・サイズ
【右上】: 現在有効なスレッド数
【左下】: 現在までに読み込まれたクラスの数
  • 現在読み込まれているクラスの数、JavaVMの起動以降にメモリーにロードされたクラスの合計数(その後アンロードされたものを含む)、JavaVMの起動以降にメモリーからアンロードされたクラスの数
【右下】: JavaVMのCPU使用状況

ヒープ・メモリーの推移は、図1の左上にあるヒープ・メモリーの使用状況のように、ノコギリ状の波形が全体的にゆるやかに右肩上がりになり、一定時間後に大幅に下がるのが通常です。これは、ガベージ・コレクション(GC)と呼ばれる、JavaVMのメモリー開放機能が自動的に実行されたことによります。もしヒープ・メモリーを開放せずに蓄積したままであれば、長期的に利用されているオブジェクトが存在し続けることになります。それが想定外のことであれば、メモリー・リークを疑います。

ただし、監視(モニタリング)しながらアプリケーションを開発/実装することは、非常に稀です。開発時には何度もアプリケーション・サーバーを再起動することになるため、再起動するたびに毎回監視プロセスを変更しなければなりません。さらに、実装段階ではコードに不具合が含まれるため、運用段階とはメモリーの使用状況やクラスの数が明らかに異なるでしょう。

可能であれば、アプリケーションが完成してから単体テストの段階で何度も動かしてみて監視します。しかし、高い負荷を持つ機能でもない限り、プロセスの測定や監視をしても、あまり効果がありません。監視する対象の例には、プロトタイプ作成後の動作テストやライブラリ導入後の動作テストが挙げられます。

明らかに複数の機能や画面で共有するオブジェクトを利用する場合や、外部リソースを取得する処理、何らかの業務処理で非同期通信をする場合など、ほかの機能に比べて特殊な操作を行うもの、特に外部システムとのI/Oが発生するものは、監視の必要があります。オブジェクトが保持されるタイミングや開放されるタイミングが、共通機能や外部機能に依存するからです。何度も動かして監視する必要があります。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30