■Qualyzerとは
QualyzerはJavaプログラムの性能ボトルネック部分を検出し、利用者のプログラムチューニングや性能問題解決を支援するツールです。
Qualyzerは、以下の2つの機能を持ちます。
Qualyzerは、JDK/JRE 1.4と5.0で使用可能なツールです。(ただし、JDK/JRE 5.0においては、Javaオプションの指定に制限があります。)
◆性能情報分析機能
性能分析機能は、以下の4種類のデータを採取し、Javaプログラムの性能チューニングを支援します。
メモリ/GC情報
メモリ割当量、メモリ使用量およびGC実行時間帯を採取します。これらにより、プログラム実行の全体を通じて、メモリ(ヒープ)の使用量が安定しているか、GCが効果的に動作しているか(たとえば、GCが動作することで使用メモリ量が減少しているかなど)を確認します。
CPU情報
Javaプログラムの各メソッドで消費されるCPU時間(CPU命令走行時間)を調べ、メソッド単体の実行時間およびメソッドの呼出し回数を採取し、高コストなメソッドを検出します。
サンプリング情報
時間(ミリ秒)刻みのサンプリング情報をメソッドレベルで採取します。簡易的な高コストメソッドの検出機能です。
メソッドトレース情報
Javaプログラムで使用される全メソッドのスタックトレースを採取します。トレースの深さはプログラム実行時にオプションで指定できます。
◆メモリ(ヒープ)ダンプ機能
メモリ(ヒープ)ダンプ機能は、Javaプログラムのメモリ(ヒープ)使用に関する性能トラブルの原因究明を支援します。
Javaのメモリ管理はJava VMが備えるガーベジコレクタ(GC)が自動的に行います。使用を終えたオブジェクトの領域をGCが解放しますが、GCはオブジェクトを保持している変数や配列要素が存在しないことが確認されて、はじめてそのオブジェクトが「使用を終えた」と判断します。したがって、プログラマーがオブジェクトの使用を終えたつもりでも、そのオブジェクトを保持した変数や配列要素が存在している限り、GCはその領域を解放できずに残り続けることになります。このような場合をJavaのメモリリークと呼んでいます。
Qualyzerのメモリ(ヒープ)ダンプ機能では、オブジェクト割当数、オブジェクト残存数、オブジェクトを生成したメソッドのスタックトレース、オブジェクトの参照情報、およびオブジェクトの内容を採取します。採取した情報はHTML形式で表示されます。メモリを圧迫しているオブジェクト(群)が、どこで作成され、なぜGCで回収されないのかを調査する場合に有効です。
■動作環境
製品添付のJDK/JRE 1.4、5.0
■注意事項
JDK/JRE 6において本機能を指定した場合
Qualyzerの情報収集(性能情報、メモリ(ヒープ)情報)は、Java Virtual Machine Profiling Interface(JVMPI)機能により実現しています。
JDK/JRE 6では、JVMPI機能が提供されていません。
そのためJDK/JRE 6において本機能を指定した場合、Java VMは次のメッセージを出力して終了します。
> java -Xrunfts:sample=10 ClassName |
JDK/JRE 5.0使用時のガーベジコレクション(GC)の指定
Qualyzerの情報収集(性能情報、メモリ(ヒープ)情報)は、Java Virtual Machine Profiling Interface(JVMPI)機能により実現しています。
JDK/JRE 5.0でパラレルGCを使用した場合は、JVMPI機能が抑止されます。そのため、JDK/JRE 5.0ではJVMPI機能を有効にするために、javaの起動オプションに次のオプションを指定する必要があります。
シリアルGCを使用する場合: “-XX:-UseParallelGC”オプション
FJGCを使用する場合: “-XX:+UseFJGC”オプション
FJVMがサポートするGC処理の詳細は、“チューニングガイド”の“JDK/JREのチューニング”の“FJVMでサポートされるガーベジコレクション処理”を参照してください。
たとえば、性能情報収集(fts)を実行する場合は、次のようにオプションを指定します。なお、太字はユーザの入力部分で、ClassNameはクラス名です。
java -XX:-UseParallelGC -Xrunfts:sample=10 ClassName |
本オプションが指定されていなかった場合、Java VMは次のメッセージを出力して終了します。
> java -Xrunfts:sample=10 ClassName |
Linuxにおける文字化け
Linux上で、Qualyzerで情報を表示させる場合、環境によっては、以下のようなメッセージが出力され、画面上の日本語が□で表示されることがあります。
Warning: Cannot convert string "-watanabe-mincho-medium-r-normal--*-140-*-*-c-*-jisx0208.1983-0" to type FontStruct |
これは表示上の問題だけで、実動作には問題ありません。
原因は、フォントの設定が正しくないためです。使用するXサーバで利用可能なフォントに応じて, font.propertiesを修正する必要があります。
font.propertiesの詳細は、以下を参照してください。
http://java.sun.com/j2se/1.4.2/docs/guide/intl/fontprop.html
Solaris、Linux上で、Qualyzerで情報を表示させる場合、X Windowシステムが必要です。
X Windowシステムを用意できない環境下では、ofileオプション(性能情報)、-oオプション(ヒープ情報)を指定することで文字情報(CSV形式のファイルやHTML形式のファイル)としてデータを参照することができます。
性能情報(heap情報)をCSVファイルに出力する方法の例
java -jar fts.jar ofile=heap.txt data=qua.21686 heap |
ヒープ情報をCSVファイルに出力する方法の例
java -jar holmes.jar -o test -i qua.21695 -csv |