|
特長
HPjmeterは、プラットフォームに依存しないツールです。HPjmeterを使用すると、プロファイリング データをグラフィカル表示して、パフォーマンスのボトルネックを検出することができます。HPjmeterは、すべてのサポートされるプロファイリング オプションにより収集したデータから、可能なメトリクスを抽出します。ただし、HPjmeterの実際の機能は、Java VM のバージョン、オペレーティングシステム、プロファイリングに使用されたプロファイリング オプションに依存します。
ほぼすべてのプラットフォームで、HPjmeterは次の機能を提供します。
- 複数ウィンドウのGUIでマーキングと検索の操作
- 以下を含む15のメトリクス
- メソッドの呼び出し回数
- 包含的および排他的メソッドの実行時間(CPU時間またはクロック時間)
- 呼び出し回数、またはCPU時間やクロック時間を含むインタラクティブなコール グラフ(使用できる場合)
- 割り当てられたがまだ残っているオブジェクトと割り当てた場所、オブジェクト リファレンス グラフ
- 平均実行時間、クラス時間などの導出メトリクス
- スレッドごと、またはプロセスごとの表示
- ロック コンテンション、インライン化、スローされた例外、メモリのリークに関するヒューリスティック
- パフォーマンス改善のトラッキングを比較する機能
さらに、HP-UXバージョンのHotSpot VMのユーザーには次の機能も提供されます。
- オーバーヘッドの低い拡張プロファイリング エージェント(-Xeprof オプション)
- 以下を含む多数の追加メトリクス
- 全てのJavaメソッドについてのCPU時間とクロック時間
- ロック コンテンションのメトリクス
- Tガベージ コレクションとスレッド スターベーションを含む、Javaスレッドのライフタイムと、スレッドのライフタイム全体にわたるスレッド状態の分布を示す、スレッド ヒストグラム
- 追加の導出メトリクス
- プロファイリングによる割り込みを補償するためのCPU時間の修正
サポートされているJava製品のバージョン
HPjmeter はアプリケーションをプロファイルするために使用するJREと直接対話するのではなく、JREによって生成されたプロファイル データ ファイルを読み取ります。プロファイリング オプションによって収集したデータから生成されるプロファイル データ ファイルを利用してHPjmeterがデータを表示できるのは、以下のバージョンのJava製品です。
- HP-UX 11.0および11i用Javaリリース1.3.xまたは1.4.x SDKおよびJRE、HotSpot VM(データは-Xeprofまたは-Xrunhprofオプションによって収集されます)
- HP-UX 11.0および11i用Javaリリース1.3.x SDKおよびJRE、Classic VM
(データは-Xrunhprofオプションによって収集されます)
- HP-UX 11.0および11i用Javaリリース1.2.2.05以上のSDKおよびJRE、HotSpot VM(データは-Xeprofオプションによって収集されます)
- HP-UX 10.20、HP-UX 11.0およびHP-UX 11i用Javaリリース1.1.8 JDKおよびJRE
(データは-profおよび-eprofオプションによって収集されます)
- Hewlett-Packard Chai VM 5.5以上(データは-Xrunprofオプションによって収集されます)
- すべてのJava 1.4実装(データは、JavaSoft JDK-1.4.0-b92実装と互換の-Xrunhprofオプションによって収集されます)
- すべてのJava 1.3実装(データは、JavaSoft JDKJDK-1.3.0-C実装と互換の-Xrunhprofオプションによって収集されます)
- すべてのJava 1.2実装(データは、JavaSoft JDK-1.2.1-A実装と互換の-Xrunhprofオプションによって収集されます)
- すべてのJava 1.1実装(データは、-profオプションによって収集されます)
システム要件
HPjmeterを実行するためには、以下のいずれかのシステム要件を満たす必要があります。
- Java Virtual Machine 1.1.6以上(開発環境は必要ありません)
および
- Swing 1.1パッケージ。これらは、Sun Microsystems, Inc.のJava Foundations Classesサイトから別途入手できます。
または:
- Swing 1.1パッケージを含む、任意のJava 2仮想マシン
インストール手順
HPjmeterは、圧縮されたTARファイルまたはZIPファイルとして入手できます。 内容は両ファイルとも同じで、下記のコンポーネントファイルが含まれます。
- HPjmeter.jarファイル プログラム
- Java2Demo.eprof サンプル プロファイル データ ファイル
- HPjmeter.release.notes — これらのリリースノートのASCIIバージョン
HPjmeterの圧縮されたTARファイル(HPjmeter-1.6.tar.gz)
または ZIPファイル(HPjmeter-1.6.zip)をダウンロードします。
圧縮されたTARファイルをダウンロードした場合は、次の手順に従います。
- ダウンロードしたバイナリ ファイル(HPjmeter-1.6.tar.gz)を好みのディレクトリに保存します。
- システムコマンドを利用して、次のように .tar.gzファイルをgunzipおよびuntarします。
gunzip
HPjmeter-1.6.tar.gz tar -xvf HPjmeter-1.6.tar
圧縮されたZIPファイル(HPjmeter-1.6.zip)をダウンロードした場合は、次の手順に従います。
- ダウンロードしたZIPファイルを好みのディレクトリに保存します。
- システムコマンドを利用して、次のようにファイルをunzipします。
unzip
HPjmeter-1.6.zip または、 WinZip®または類似のプログラムを利用してファイルをunzip
HPjmeterの入手可能な新しいバージョンは、次の場所にあります。 hp.com
サイト(http://www.hp.com/products1/unix/java/hpjmeter/)または
HPjmeterサイト
(http://www.HPjmeter.com/)
Java 1.1.xでのHPjmeterの実行
HPjmeterはSwing 1.1を使用します。必ず、CLASSPATHに適切なSwing jarファイルを含めてください。以下に具体例を示します。 Swing 1.1は、Java
Foundation ClassesのWebサイト (http://java.sun.com/products/jfc/download.html)から入手できます。
以下はcshにおける例です。
setenv
DISPLAY <your display>:0.0 setenv SWINGLOC
<directory in which swingall.jar installed>
setenv HPJMETERLOC <directory in which HPjmeter.jar
installed> setenv BASEPATH
/opt/java/lib/classes.zip # may depend on the
installation setenv CLASSPATH
$HPJMETERLOC/HPjmeter.jar:$SWINGLOC/swingall.jar:$BASEPATH
java -mx128m HPjmeter
以下はkshにおける例です。
export
DISPLAY=<your display>:0.0
SWINGLOC=<directory in which swingall.jar
installed> HPJMETERLOC=<directory in which
HPjmeter.jar installed>
BASEPATH=/opt/java/lib/classes.zip # may depend on the
installation export
CLASSPATH=$HPJMETERLOC/HPjmeter.jar:$SWINGLOC/swingall.jar:$BASEPATH
java -mx128m HPjmeter
Java 2でのHPjmeterの実行
Java 2ではSwingパッケージは標準拡張です。インストールしたり、パスを指定したりする必要はありません。
以下はcshにおける例です。
setenv
DISPLAY <your display>:0.0 setenv HPJMETERLOC
<directory in which HPjmeter.jar installed>
java -mx128m -jar $HPJMETERLOC/HPjmeter.jar
以下はkshにおける例です。
export
DISPLAY=<your display>:0.0
HPJMETERLOC=<directory in which HPjmeter.jar
installed> java -mx128m -jar
$HPJMETERLOC/HPjmeter.jar
マニュアルとヘルプ
以下の情報を利用することができます。
- HPjmeterオンライン ヘルプ -- Javaの各バージョンで利用できるメトリクスやプロファイリング オプションの詳細な説明があります。
- HPjmeterバージョン1.6リリースノート -- このドキュメントです。
- HPjmeter
ツアー -- HPjmeterで提供されている多くの機能の使い方が説明されています。http://www.hp.com/javaにアクセスしてください。
- HP-UXのJavaパフォーマンス チューニング ガイド
http://h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/1,1701,1602,00.htmlにアクセスしてください。
HPjmeterの使用にあたっては、Javaコードの特別なコンパイルや準備は必要ありません -- 必要なのは、アプリケーションの実行時にプロファイリング オプションを指定することだけです。どのプロファイリング オプションを使用できるかは、使用しているJava仮想マシンのバージョンによって異なります。プロファイリング オプションについては、HPjmeterオンライン ヘルプ、リリースノートの「サポートされているJava製品のバージョン」の項でそれぞれ、説明しています。
プロファイリングを有効にしてアプリケーションを実行すると、仮想マシンは、実行中に収集されたプロファイル データをファイルにダンプします。HPjmeterはプロファイル データを後処理するので、ユーザーが解析を開始できるのは、アプリケーションの完了後です。
以下では、HPjmeterを使用してアプリケーションのプロファイリングを行う方法を説明します。
- データ ファイルの読み込み
- メトリクスについて
- コール グラフについて
- スレッド パフォーマンスの解析
- 問題の解析
- ロック コンテンションの推定
- オブジェクト割り当ての検索
データ ファイルの読み込み
HPjmeterウェルカム スクリーンが表示されたら、アプリケーションで生成されたプロファイル データ ファイルを読み込むことができます。File > Openを選択し、そのファイルを選択します。
HPjmeterファイル選択ダイアログ ボックスでは、特定のファイル タイプを選択することも、すべてのデータ ファイルを表示することもできます。HPjmeterは、選択されたファイルの形式を自動的に認識します。
プロファイル データ ファイルの例 'Java2Demo.eprof' が添付されています。このファイルは、Java 2 JRE 1.3.1を利用するHP-UX 11.0 ワークステーションで、Sun Microsystems社のJava 2Dデモプログラムを実行することで入手できます。(下記で入手可能です。 http://java.sun.com/products/java-media/2D/ また、Java 2 SDKに含まれて配布されます。)
HPjmeterが現在サポートしているファイル形式は、以下の通りです。
- 標準のJava仮想マシン バージョン1.1.xで生成されるファイル形式
(ファイル名拡張子は .prof)
- Java 2実装に含まれる'hprof'プロファイラによって生成されるファイル形式(ファイル名拡張子は .hprof.txt)
- HP-UX Javaバージョン1.1.8およびHP-UX SDK for the Java 2 Platform(Hotspot VMバージョン1.2.2.05以上、1.3.xまたは1.4.x用)で使用可能な拡張プロファイリング用独自形式(ファイル名拡張子は .eprof)
- Chai VM プロファイリング用独自形式(ファイル名は 'profile.cprof')
データ ファイルの読み込みが完了したら、適切なメニュー項目を選択して、そのアプリケーションに関する統計情報を表示できます。
メトリクスについて
プロファイル データはすべて、メトリクスによって表示されます。各メトリクスについてはオンライン ヘルプを参照してください。
メトリクスの1つはメソッドの呼び出し回数です。これは、アプリケーションの実行時全体で各メソッドが呼び出された回数です。これは、呼び出し回数の多い順に並べられます。最も頻繁に呼び出されたメソッドが、画面の一番上に表示されます。
メソッド名の出力形式はカスタマイズすることができます。クラスのパッケージ名と、メソッドの引き数タイプは個別にオン/オフすることができます。
各メソッドで費やされた時間を表すメトリクスもあります。これは、すべての実行時間の累積です。最も時間を費やしたメソッドが、画面の一番上に表示されます。
アプリケーションを解析するために、複数のメトリクスを同時に表示したい場合があります。HPjmeterでは、複数のウィンドウを開いて、同じプロファイル データ ファイルについて異なるメトリクスを表示したり、異なるファイルについて異なるメトリクスを表示したりできます。新しいウィンドウを開くには、Window > New Windowを選択します。
コール グラフについて
メトリクスだけでは、アプリケーションの制御フローの全体を表示することはできません。HPjmeterでは、コール グラフ情報も表示できます。コール グラフ情報を表示するには、Metric > Call Graph Treeを選択します。
コール グラフは、ツリー表示されます。ツリーの「ブランチ」(ノード)の横にある丸をクリックして、ノードを状況に応じて展開したり折り畳むことができます。
ブランチ データの階層を下っていくと、呼び出し元の下位に、呼び出されたメソッドが表示されます。字下げされた各行は、呼び出された1つのメソッドを表します。呼び出されたメソッドは時間の長い順に並べられ、最も問題があると考えられるメソッドが一番上に表示されます。
長い時間がかかっているノードを繰り返し展開し、ツリー階層を展開していくと、最も時間を要したプログラム タスクがどこで発生したかを突き止められます。
もう1つの便利な機能は、Editメニューのメソッド検索機能です。これを使用すると、パッケージ名、クラス名、またはメソッド名でメソッドを検索できます。検索を行うと、コール グラフ ツリーが自動的に展開され、検出したメソッドが表示されます。メソッド名をダブルクリックすると、そのメソッドの別の呼び出し元が表示されます。
スレッド パフォーマンスの解析
プロファイル データに適切な情報が含まれていれば、HPjmeterは、アプリケーションの実行中に作成されたスレッドを表示することができます。スレッドを表示するには、Metric > Threads Histogramを選択します。ヒストグラムには、個別の各スレッドの存続時間が表示されます。各スレッドのメトリクスを独立して表示することも可能です。これを行うには、ScopeメニューでThreadを選択します。
これは特に、使用しているアプリケーションに不可欠な処理を担当するスレッドを選択し、そのスレッドのパフォーマンスを向上したいような場合に便利です。
メモリの問題の解析
メモリの使用効率が悪いことも、アプリケーションのパフォーマンスが上がらない原因の1つになります。HPjmeterには、メモリの使用状況がわかるメトリクスがあります。アプリケーションの実行中に割り当てられたオブジェクト数を解析することは、メモリの使用状況を知る1つの方法です。プロファイル データに直接割り当ての数が含まれない場合、このメトリクスは、そのクラスのコンストラクタの呼び出しの数に基づいて評価されます。オブジェクトの数を表示するには、Metric > Created Objectsを選択します。
オブジェクト割り当ての検索
割り当てられたオブジェクトの数だけでなく、それらのオブジェクトがプログラムのどこで作成されたかについても知ることができます。
オブジェクトが作成された場所を検索するには、Metric > Created Objects (Count)を選択します。クラス名をダブルクリックすると、そのクラスのオブジェクトを割り当てたすべてのメソッドが、割り当てられたオブジェクトの数の順にリストされます。
メソッドにより生成されたオブジェクトのメトリクスを選択しても、そのメソッドに割り当てられたすべての種類のオブジェクトの数を表示することができます。
別のメモリ関連のメトリクスは、アプリケーションの実行が完了した時点でメモリに残っていた内容を表示するものです(Metric > Residual Objectsの順に選択)。これには、オブジェクトの配列、スカラ タイプの配列、および配列の配列が含まれます。
オブジェクト リファレンス グラフは、他のオブジェクトへのすべての参照とともに、すべての活動中のオブジェクトをヒープから表示します。そのようなメトリクスを解析することは、「メモリ リーク」の検知に役立つ場合があります(Java技術の場合、メモリ リークは、無意味に参照されるオブジェクトがあることを意味します)。
ヒューリスティック ヘルプ
HPjmeterには、パフォーマンスのボトルネックを予測する機能があります。Java技術におけるそのようなボトルネックの1つは、ロック コンテンションが高くなる場合です。これは、同期しているメソッドまたはステートメントのロックを取得するためのスレッドの待ち時間が長くかかるという、同期に関する問題です。ロック固有のプロファイル データがない場合でも、HPjmeterは、メソッドのクロック時間やコール グラフを使用して、ロック コンテンションの問題がどのメソッドで発生したかを検知できる場合があります。
長引くオブジェクトは「メモリ リーク」と呼ばれ、パフォーマンスの問題が発生する可能性のある領域です。HPjmeterは、ヒープダンプを解析して、メモリ上の他の多数のオブジェクトを保持している可能性のあるオブジェクトを見つけることができます。
また、コール グラフおよびメソッドの回数を解析することで、HPjmeterは、どのメソッドがアプリケーションの実行中に例外をスローしたか、または、どのメソッドがインライン化に最適かを示します。
ただし、HPjmeterはこの特定を推論的に行うものであることに留意してください。この機能は Guessメニューから選択することができます。
よくある質問
Q: HPjmeterを実行するにはHP-UXJava™テクノロジが必要ですか。他のプラットフォームでも同じように動作しますか。
A: HPjmeterは完全にJavaで記述されています。Java 1.1やJava 2をサポートするプラットフォームであればどこでも動作します。ただし、Java 1.1をお使いの場合はSwing 1.1のパッケージが必要です。これは、Java Foundation ClassesのWebサイトから入手できます。
Q: HPjmeter.jarファイルはどの場所に置いたらよいですか。
A: 特に決まりはありません。ただし、ファイルをCLASSPATHに含 めるか、呼び出し時に明示的な場所を指定してください。以下に例を示します。 java -verbose:gc -jar
/tmp/HPjmeter.jar
Q: .BATファイルがHPjmeterに含まれていないのはなぜですか。
A: HPjmeterは、プラットフォームに依存しないツールですが、.BATファイルはDOSまたはWindowsにのみ対応しています。また、jarファイルの置き場所、使用するJava VM、およびHPjmeterのオプションは、ユーザーが指定できます。
Q: HPjmeterを実行中にアプリケーションを起動する方法がわかりません。
A: 他の一般的なプロファイラとは異なり、HPjmeterはアプリケーションを起動しません。
使用するJava VMのプロファイル オプションを指定してプロファイル データを収集し、HPjmeterを使用してプロファイル データの読み込みと分析を行う必要があります。
Q: HPjmeterを使って、他のプラットフォームから取得したプロファイリング データを解析することはできますか。
A: お使いのJava VMにより、HPjmeterによってサポートされているプロファイリング オプションが提供されている場合は、解析できます。HP-UXシステム以外からプロファイル データを収集するには、-Xrunhprofオプションを使用します。このオプションはほとんどのJava 2実装で使用可能です。Java 1.1およびHP Chai VM 5.5以上の-profオプションもサポートされています。
Q: -Xeprofを使用してアプリケーションを実行すると、メモリ不足が発生します。ただし、-verbose:gcでは、ヒープ不足は報告されません。プログラムがメモリ不足を報告するのはなぜでしょうか。
A: Cのヒープ領域が不足している可能性があります。原因としては、システム構成に問題があるか、またはアプリケーションが多数のメソッドを呼び出し、スレッドを作成していることが考えられます。これが問題かどうかを判別する最善の方法は、Glance/gpmを使用してシステムが使用しているメモリを監視することです。プロセスのメモリ領域ウィンドウを表示し、データ領域のサイズを監視します。データ領域が増加し続ける場合は、プロファイラがデータを保存する追加領域を必要としています。HPjconfigツールを使用すると、システム構成を確認し、十分なCのヒープ領域が確保されているかどうかを確認できます。このツールは、次のHP Javaサイト
(http://www.hp.com/java)から入手できます。
Q: Java VMでプロファイリング オプションを指定したのですが、プロファイル データ ファイルができなかったり、ファイルが完成していなかったりします。何が問題なのでしょうか。
A: 恐らく、アプリケーションの処理が完了する前にファイルを読もうとしたのだと思われます。またVMは、全てのスレッドが終了するか、System.exit()を呼び出すかで、正常終了していなくてはなりません。そのために、アプリケーションのコードに少々手を入れる必要がある場合もあります。VMのプロセスを抹消(kill)する際にプロファイル データが作成されるのはJava 1.4 以上のみです。-Xrunhprofを使用している場合は、"kill -QUIT <PID>" (またはWindows上でCtrl-Break)を使用すると、プロファイル データを強制的に出力できます。
Q: プロファイル データの取得に-Xrunhprofを使用しましたが、HPjmeterによってファイルが拒否されました。何が問題なのでしょうか。
A: いくつかの原因が考えられます。同時に複数の仮想マシンのインスタンスを実行すると(たとえば、Macromedia社のJRunサーバーのシャットダウン時など)、両方のVM(仮想マシン)が各自のプロファイル データを同じファイルに書き込むため、データが破損する可能性があります。どちらか一方のみがhprofを使用する、または各自が異なるプロファイル データ ファイル名を使用するようにする必要があります。さらに、hprofによって作成されたファイルの形式が標準化されていない可能性があります。お使いのバージョンでは、HPjmeterのこのバージョンとの互換性のないファイルが作成されていることも考えられます。通常は、テキスト エディタを使用して、プロファイル データ ファイルがHPjmeterで受け入れられるように修正できます。
Q: ヒープを最大サイズまで増加させても、プロファイル データの読み込み中、HPjmeterでメモリ不足が発生します。どのように対処すべきでしょうか。
A: ヒープ サイズをシステムで使用可能な最大メモリに増加させた後もプロファイル データのサイズが大きすぎる場合、収集するデータ量を削減する必要があります。アプリケーションを縮小してください。ヒープ解析(-Xrunhprof:heap=all,...)を縮小する場合は、アプリケーションの実行時のヒープ サイズを小さくします。さらに、ヒープをダンプする前に、完全なガベージ コレクションを実行する(System.gc()を呼び出す)と効果的です(-Xrunhprofではできません)。メソッドの実行時間を縮小する場合、スレッドの数が多ければスレッドの数を減らします。アプリケーションに生存期間の短いスレッドが極端に多い場合は、実行時間を短縮します。
Q: HPjmeterではどれくらいのヒープが必要ですか。
A: プロファイル データ ファイルにより異なります。多くのメモリの問題は、ヒープのダンプ解析に関連するものです。一般的に、ヒープのサイズは、java.hprof.txtファイルの5倍になると考えられています。たとえば、100 MBのファイルを処理するには、-mx500mを使用し、必要に応じて調整します。必要なヒープ サイズが非常に大きい場合は、JVMの64ビット バージョン(たとえば、-d64 -Xmx4g -Xmn300m)の使用をお勧めします。
Q: HPjmeterの実行中にヒープの最大サイズを増やしたところ、プロファイル データ ファイルの読み込み中のままとなり、コンピュータの応答がなくなりました。HPjmeterはコンピュータにどのような影響を及ぼしたのでしょうか。
A: コンピュータまたはオペレーティング システムの処理能力を超えたヒープ サイズを指定したと考えられます。スラッシング(システムが断続的にハード ドライブとの仮想メモリ ページのスワッピングを行っている状態)が発生しています。
Q: プロファイル データの読み込み中、HPjmeterが次のメッセージ"There were... dangling references found in the heap dump"を出力しました。これは何でしょうか。
A: この警告メッセージは、Java VM、JVMPI、またはhprof実装のエラーにより発生したヒープ ダンプの不整合を指摘しています。通常、このエラーによる影響は少なく、影響を及ぼす範囲はヒープ メトリックに限定されます。その他のメトリックには影響はありません。
Q: Metricメニューのいくつかのエントリが淡色表示されています。これらのメトリックを使用する方法はありますか。
A: HPjmeterが提供するメトリックは、全体的にプロファイル データ ファイルの内容により異なります。別のメトリックを取得するには、異なるプロファイリング オプションを指定してアプリケーションを再実行する必要があります。詳細については、HPjmeterのオンライン ヘルプの「Features and Platforms Summary」を参照してください。
Q: HPjmeterはなぜこんなに遅いのですか。スクロールがスムーズにできないのですが。
A: Java 1.2の実装の多くは、リモート ディスプレイに関してパフォーマンス上の問題があります。特に、HPjmeterなどSwingを使用したアプリケーションで、この問題が起こります。可能であれば、HPjmeterは自分のワークステーションでローカルに実行してください。リモートで実行しなければならない場合は、Java 1.1を使用するか、HP-UX Java 1.3でFastSwingオプションを指定するとパフォーマンスを改善できることがあります。最善策は、Java 1.4を使用することです。
Q: プロファイル データの中に<unknown caller>というラベルがあります。これは何でしょうか。
A: プロファイリング情報は、それぞれのメソッドの入り口と出口でJava仮想マシンによって収集されます。仮想マシンは、呼び出した側のメソッドを特定できなかった場合、<unknown caller>という名前を割り当てます。そのため、<unknown caller>という名前が複数のメソッドに表示されることがあります。普通、呼び出し側を認識できない理由は、それがJavaメソッドでない場合です。実際的には、<unknown caller> のエントリは仮想マシン自身を指していると考えてさしつかえありません。
Q: HPjmeterが表示するタイミング データの単位は何ですか。
A: サンプリングの場合、hprofは、オーバーヘッドを適切なレベルに抑えるため、様々なサンプリング インターバルを使用します。トレースによるプロファイリングの場合には、Java仮想マシンはミリ秒で計測します。ただし、プロファイリングの割り込み回数が非常に大きくなることがあります。SPECjvm98 (http://www.spec.org) でのHotSpot VM(-Xeprof オプション) の割り込みによる速度の低下は3倍程度に抑えられています。ただし極端な場合、アプリケーションのプロファイリングで10倍以上の速度低下が発生することがあります。実際問題としては、多くの場合、本来の「時間」意味は失われます。タイミングの値は抽象的でプラットフォームに依存しない時間単位で計測されている、と考えてください。
Q: 特定のスレッドだけのパフォーマンス データを見ることはできますか。
A: できます。HotSpot JVMで-Xeprofオプションを使う、Java 2のhprofでthread=yオプションを使う、Java 1.1で-eprofオプションを使う、のいずれかの方法で可能です。
Q: 特定のタイム スライスだけのパフォーマンス データを見ることはできますか。
A: できます。HP Java 1.4.1以上で-Xeprofを使用します。または、大きなタイム スライスを使いたいのであれば、次の方法を試してみてください。アプリケーションを2度、プロファイリングします。まず、所定のタイム スライスの初めまで実行します。次に、そのスライスの最後まで実行します。データファイルが2つできますので、それをHPjmeterで比較します。この2つを全く同じ環境で実行すれば、そのタイム スライスについてのおおよそのメトリクスが得られます。
Q: 包含的メソッド実行時間のメトリクスを見ているのですが、1つあるいは複数のメソッドについて報告される時間が非常に大きいのです。アプリケーションの総実行時間よりも大きい値になります。何が間違っているのでしょうか。
A: 恐らく、手順に問題はないものと思われます。再帰関数で、このようなタイミング値が報告されることがあります。関数を実行するたびに、その呼び出しに関する時間が収集されます。再帰呼び出しの深さによっては、その合計時間はアプリケーションの実行時間よりも大きくなります。また、この見るからに不正な状況は、ある関数内で複数のスレッドが時間を使った場合にも報告されることがあります。
Q: コール グラフのツリーでノードを展開しようとしたのですが、子ノードが見えません。
A: あるノードのブランチが持っているタイミング値が全て、現在の切り捨て基準値よりも小さい、ということがあります。その場合、子ノードは表示されません。
Q: コール グラフ ツリーの表示を精度調整用スライダーで調整するにはどうすればいいでしょうか。
A: 方法は2つあります。1つは、スライダー ノブの横をクリックして、1を単位に切り捨て基準値を調整する方法です。もう1つは、ツリーを表示するダイアログ ウィンドウをツリー全体を表示するまで拡大し、画面の幅一杯に広げるというものです。ツリーがまだ小さい場合は、切捨て値を調整した方が良いでしょう。
Q: コール グラフ ツリーのトップレベルに複数のエントリがあります。これはなぜでしょうか。
A: Processのスコープでは、他のスレッドを呼んでいるがそれ自身は呼ばれていないと見られるスレッドはエントリを1つ生成します。こうしたメソッドはトップレベルに配置されます。コール グラフに複数のルートエントリがあるもう1つの理由は、プロファイリング エージェントがそれを呼び出したメソッドを見つけられなかった、というものです。これは、たとえば、java.lang.reflectパッケージを使っている場合に起こります。
Q: HPjmeterによって、リファレンス グラフ内のオブジェクトの1つがゼロ バイトと報告されます。これはなぜでしょうか。
A: オブジェクトが保持するバイトとは、あるオブジェクトに対するすべての参照が消滅したときに(完全な)ガベージ コレクションが回収できるバイト数です。この値がゼロである場合、このオブジェクトがヒープから削除されている可能性があります。オブジェクトへのすべてのパスにソフト参照または弱参照が含まれている場合、または互換性のあるオブジェクトにアクセスできるのが終了処理待ちの一部のオブジェクトのみである場合に、この状況が起こる場合があります。
Q: Guess - Lock Contentionが、同期していない、あるいは同期ステートメントを使っていないメソッドについても報告してきます。これはなぜでしょうか。
A: これは起こりえます。HPjmeterはモニターのロックについての情報を持っていません。そのため、どのメソッドの実行が遅れているかは、タイミングのデータを使って推測するしかないからです。また、VMが問題のメソッドに同期メソッドをインライン化した可能性があります。
Q: HPjmeterの改良点についてアイディアがあります。知らせる方法はありますか。
A: java-tools-support@cup.hp.comに電子メールをお送りください。
ご注意
Copyright (c) Hewlett-Packard Company 1997-2003.All Rights Reserved.著作権法に基づく場合を除き、書面による事前の許可なく本ドキュメントを複製、改変、または翻訳することは禁止されています。 UNIXは、X/Open Company Limited が独占的にライセンスしている米国ならびに他の国における登録商標です。 本ドキュメントに掲載されている情報は正確を期していますが、市場性および特定目的に対する適合性の黙示保証などを含め、当社では本ドキュメントに関する一切の保証をいたしません。 また、当社は、本ドキュメントの誤り、および本ドキュメントの提供、実行、使用による偶発的または間接的な損害に対する責任は負いません。 本ドキュメントの情報は、予告なしに変更されることがあります。
JavaおよびJavaに関連する商標およびロゴは、米国および他の国でのSun Microsystems, Inc.の商標または登録商標です。
|