アプリケーションのプロファイル作成時に、デフォルトでは「プロファイルおよびロギング」パースペクティブに「コンソール」ビューは表示されません。
「プロファイルおよびロギング」パースペクティブ内で「コンソール」ビューを開くには、「ウィンドウ」->「ビューの表示」->「コンソール」を選択します。
コンソールに標準出力を表示するには、「ウィンドウ」->「設定」->「実行/デバッグ」->「コンソール」をクリックし、「プログラムが標準出力に書き込むときに表示」を選択します。
新規 Probekit ソース・ファイルの作成時に、使用する XML エンコードをウィザードから選択できます。デフォルト選択項目は ASCII です。プローブ・ソース・ファイル内で非 ASCII 文字を使用したい箇所がある場合は (例えば、「ラベル」フィールドまたは「説明」フィールド、あるいはフラグメントの Java コード内で)、ASCII ではなく UTF-8 エンコードを選択する必要があります。
既存のプローブ・ソース・ファイルのエンコードを変更するには、ファイルを右クリックして、「アプリケーションから開く」->「テキスト・エディター」を選択します。XML ヘッダー内でエンコードを「UTF-8」に変更し、ファイルを保管してクローズします。 もう一度右クリックし、「アプリケーションから開く」->「プローブ・エディター」を選択して、内容を編集します。
リーク分析機能は、OS/400® iSeries(TM) 上で実行されるユーザー・プログラムに対しては使用できません。このプラットフォーム上では、Hyades 最適化ヒープ・ダンプが不完全であり、他のフォーマットでヒープ・ダンプを生成することはできません。
プロファイル・ツールのパフォーマンスは、収集されるデータの量と、このデータがワークベンチに転送される速度に直接関連しています。収集されるデータの量が増えると、分析にかかる時間、およびさまざまなタスクの実行に使用できるメモリーのどちらの面でも、パフォーマンスの低下が起こります。ユーザーがプロファイル作成のパフォーマンスを高めるには、いくつかの方法があります。
- まず、特定の機能のプロファイルを作成するために十分と思われる、最小量のデータの収集から始めることをお勧めします。このためには、プロファイル起動構成の中で効率の良いフィルターを設定します。「実行」->「プロファイル」ダイアログで、「プロファイル」タブを選択します。プロファイル・セットを選択し、「編集」ボタン、「次へ (Next) >」の順に選択すると、「フィルター」ダイアログが表示されます。フィルターは、単に目的のエリアを収集対象に含めるために使用します。以後の実行時に、いつでもフィルターを変更して、異なるデータや追加のデータを組み込むことができます。
- 始動コードのプロファイルを作成したくない場合は、「実行」->「プロファイル」ダイアログの「プロファイル - 制限」タブで、「起動されたアプリケーションのモニターを自動的に開始する」チェック・ボックスのチェックを外すことを試してください。 これにより、分析されるプログラムの起動にかかる時間が短縮され、また始動コードがプロファイル対象から除外されます。プロファイル作成を開始するには、ワークスペースが起動した後、「プロファイル・モニター」の「モニターの開始」ツールバー・ボタンをクリックする必要があるので注意してください。
- ファイルへの出力のリダイレクトを試してください。 このようにすると、RAD 内でのメモリー使用量が減ります。以後、RAD がこのプロファイル・ファイルの検索のみに使用されているときは、このタスク用の空きメモリーが多くなっているので、ファイルを RAD にインポートできます。 このためには、プロファイル作成の前に、「実行」->「プロファイル」ダイアログを選択し、「プロファイル」タブ、「宛先」サブタブを選択して、「ファイルへのプロファイル・データの送信」チェック・ボックスを選択します。 その後、「ファイル」->「インポート」ダイアログを使用し、「プロファイル・ファイル」タイプを選択します。このオプションが選択されているときは、プロファイル作成中にデータを表示できないことに注意してください。まずインポートを行った後、データを表示できます。「インポート」ダイアログでプロファイル・ファイルの一部分のみをインポートすることによって、メモリーの量をさらに減らすことができます。 さまざまな部分をインポートして、個々に検討することをお勧めします。
- プロファイル作成を行うと大量のメモリーのオーバーヘッドがかかるので、RAD によって使用される仮想メモリーを増やすと効果が得られる場合があります。512MB の仮想メモリー (最大は 1GB) を使用して RAD を開始するには、rationalsdp.ini ファイルに以下の行を追加してください。VMArgs=-Xms512m -Xmx1024m
- ターゲット・システム上でのデータ収集時に問題が発生した場合は、データを RAD に送信するために使用するバッファーのサイズを増やすことができます。次に示す行を serviceconfig.xml に追加して、エージェントを再始動します (これにより、バッファー・サイズが 256MB に増えます)。 また、CPU 集中度の非常に高いアプリケーションの場合は、データ・チャネル・サイズをさらに増やすことも有効です。<Agent configuration="default" name="Java Profiling Agent" dataChannelSize="256M" type="profiler"/>
バイナリー Hyades 最適化ヒープ・ダンプを収集する際に、「ファイルへのプロファイル・データの送信」を選択して trcxml ファイルにデータを送信する場合は、次のことに注意してください。
デプロイメント・ホストに保管されているヒープ・ファイルにアクセスするためには、Agent Controller がデプロイメント・ホスト上で実行されている必要があります。trcxml ファイルに対して初めて「インポート」->「プロファイル・ファイル」を実行するときには、リーク分析とオブジェクト参照グラフの表示は期待通りに行われます。
「インポート」->「プロファイル・ファイル」を 2 回目に実行すると、インポートは機能しますが、リーク分析の実行やオブジェクト参照グラフの表示に失敗する場合があります。この理由としては、必要なヒープ・ファイルがデプロイメント・ホスト上で使用できなくなっている可能性があります。
この問題が発生した場合は、trcxml ファイルを最初にインポートしたプロジェクトからヒープ・ファイルにアクセスしてください。ヒープ・ファイルは、プロジェクト・ディレクトリーの下にある「leakanalysisheapdir」という名前のディレクトリー内にあります。
IBM(C)OS/390(SVC) ヒープ・ダンプは非常に大きなものです。大きなヒープ・ダンプを展開してオブジェクト参照グラフに表示するには、長時間かかることがあります。 このため、操作がハングしたように見える場合があります。進捗モニターが 100% で止まっているように見えても、ワークベンチがヒープ・ダンプの展開をアクティブに継続している可能性があります。
「ヒープ・ダンプのキャプチャー」アクションを実行すると、ターゲット・アプリケーションがデプロイされているホスト上で、Hyades 最適化ヒープ・ダンプが生成されます。 ヒープ・ダンプ宛先ディレクトリーは、Agent Controller の構成ファイル (serviceconfig.xml) 内の LOCAL_AGENT_TEMP_DIR の設定値によって制御されます。このファイルの場所と変更については、「ランタイム問題の検出と分析 (Detecting and analyzing runtime problems)」の下にあるヘルプ・トピック「Agent Controller の管理」を参照してください。
エラー・メッセージ「ヒープ・ダンプの展開に失敗しました。ステップ: ... ファイルの読み取り (Expand Heap Dump failed in step: ...Reading file)」、または「リーク分析に失敗しました。ステップ: ヒープ・オブジェクト参照グラフの作成 (Leak Analysis failed in step: Creating heap object reference graph)」のどちらかが出された場合は、Agent Controller がデプロイメント・ホスト上で実行されていることを確認して、コマンドを再試行してください。Agent Controller は、デプロイメント・ホストからワークベンチ・プロジェクト・ディレクトリーへのファイルのコピーを支援します。
リーク分析中に問題が起こった場合は、リーク分析ログ・ファイルが役に立つことがあります。
リーク分析中に、診断情報が LeakAnalysis.log ファイルに書き込まれます。LeakAnalysis.log には、リーク分析中に実行されたさまざまなステップの出力が保管されており、リーク分析の実行が成功したか失敗したかを示しています。
LeakAnalysis.log は、プロファイル・データに関連したプロファイル・プロジェクトに書き込まれます。例えば、Windows の場合は <my_workspace>\ProfileProject\LeakAnalysis.log です。
RADLEAKREGIONDUMP システム・プロパティーを使用して、ログ・ファイルに追加情報を書き込むことができます。rationalsdp.ini に次のオプションを追加します。
VMArgs=-DRADLEAKREGIONDUMP=1
rationalsdp.ini ファイルは、Rational Software Architect のインストール・ディレクトリーにあります。
リーク分析が失敗し、LeakAnalysis.log ファイルに「JVMDUMP006I 「キャッチされない」ダンプ・イベントの処理、詳細 "java/lang/OutOfMemoryError" (JVMDUMP006I Processing Dump Event "uncaught", detail "java/lang/OutOfMemoryError")」というメッセージがある場合は、リーク分析プロセスのヒープ・サイズを増やす必要があります。
このためには、Rational Software Architect システム属性 RADLEAKJVMSIZE を設定してください。この属性は、リーク分析中に使用できる JVM ヒープ・サイズを制御します。
RADLEAKJVMSIZE を設定するには、rationalsdp.ini ファイルに次のオプションを追加します。
VMArgs=-DRADLEAKJVMSIZE=value
ここで、value は新しいヒープ・サイズ限界 (例: 1024M) です。 デフォルト値は 512M です。ヒープ・サイズの表現がメガバイト単位か、ギガバイト単位かを指示する必要があります (M または G)。
rationalsdp.ini ファイルは、Rational Software Architect のインストール・ディレクトリーにあります。
スレッド分析のプロファイル機能を IBM の従来型 JVM と組み合わせて使用した場合、暗黙のデッドロック状態にあるスレッドすべての「ロック待機中 (Waiting for lock)」状態が、「プロファイルおよびロギング」パースペクティブの「スレッド」ビューに表示されません。 この原因は、収集されたデータの情報が欠落していることです。次善策: 「プロファイル」ダイアログの「引き数」タブにある「VM 引き数」フィールドに -Xj9 を追加して、IBM J9 JVM を使用してください。
Probekit ソース・ファイルの名前に非 ASCII 文字が含まれていると、処理が正しく行われません。Probekit ソース・ファイル名には ASCII 文字のみを使用してください。
*.probe ファイルのコンテキスト・メニューに表示される「Probekit」->「コンパイル」アクションは使用しないでください。代わりに、*.probe ファイルを含むプロジェクトを Probekit プロジェクトに変換し、標準のビルド手段を使用します。(Java プロジェクトを Probekit プロジェクトに変換するには、「ファイル」->「新規」->「その他 (Other)」を使用し、「プロファイルおよびロギング」セクションから「Java プロジェクトを Probekit プロジェクトに変換 (Convert Java projects to Probekit projects)」を選択します)
Probekit の「ターゲット」仕様のパターンの中では、非 ASCII 文字を使用しないでください。ターゲット・パターンに非 ASCII 文字を含むプローブは、正しく処理されません。
「以下の時点でカバレッジ・データをフラッシュ... (Flush coverage data when...)」にメソッド・パターンを追加するときには、非 ASCII 文字を使用しないでください。
メソッド・パターンの「追加」ダイアログのパッケージ、クラス、またはメソッドのフィールドに非 ASCII 文字を入力すると、無効な入力のエラーが表示され、ダイアログを閉じることができなくなります。
次善策: パターンの中では、非 ASCII 文字の代わりにワイルドカード (アスタリスク) 文字を使用します。
「*foo」のように、ワイルドカード文字 (アスタリスク) から始まる EXCLUDE フィルターを指定すると、「カバレッジ統計」、「カバレッジ・ナビゲーター (Coverage Navigator)」、および「注釈付きソース (Annotated Source)」の各ビューにデータが表示されません。 次善策: このような EXCLUDE フィルターは使用しないでください。
リーク分析機能は、IBM J9 JVM を実行するユーザー・プログラムに対しては使用できません。
環境変数 IBM_HEAPDUMP を設定し、実行中の Java プロセスに「kill -3」シグナルを送信すると、IBM J9 JVM は heapdump.20041012.093936.2192.dmp のような名前のヒープ・ファイルを作成します。j9extract と jdmpview を実行して、これらの .dmp ファイルの後処理を行い、IBM ヒープ・ダンプを作成する必要があります。
これらのヒープ・ダンプのフォーマットは、従来型の IBM jvm によって生成されるヒープ・ダンプのフォーマットと同一ではありません。
同じモニター名をもつヒープ・ダンプのセットを既存のプロジェクトに複数インポートした場合に、後でプロジェクトを保管するかワークベンチを終了すると、データが失われる可能性があります。
この問題を回避するには、インポートするヒープのセットごとに、固有のプロジェクト/モニターの組み合わせを指定してください。
WAS サーバーを始動してそのサーバーに接続した場合、Probekit と行レベル・カバレッジの両プロファイル・タイプは、ターゲット JVM にすでにロードされているクラスのデータを収集しません。次善策: これらのクラスからデータを収集するには、これらのクラスを含むプロジェクトを再始動します。
プロファイル作成中には、2 バイト文字は「コンソール」ビューに ???? と表示されます。
リーク分析のために IBM 1.4.2 SR1 JVM を使用してアプレットのプロファイルを作成すると、JVM クラッシュが発生します。この問題を回避するには、ご使用のアプリケーションに対する VM 引き数に -Xj9 を指定してください。
Hyades 最適化ヒープ・ダンプを収集する際に、ワークベンチ・ホスト、リモート・デプロイメント・ホスト、およびターゲット・アプリケーションのロケール設定値は、すべて同じであることが必要です。
IBM JVM 1.4.1 以前を使用してスレッド分析用のプロファイル作成を行うと、「プロファイルおよびロギング」パースペクティブの「スレッド」ビューに、ロック・モニターのスレッド所有者が表示されません。これは、このデータが収集されないからです。 次善策: IBM JRE 1.4.2 にアップグレードしてください。
Solaris 上でリモート・プロファイル作成を行うと、特にメモリー・プロファイルまたはスレッド分析が使用可能に設定されている場合に、Sun 1.4.x JRE の問題点により、機能の組み合わせによってはプロファイルを作成できないことがあります。Sun のサイト http://developer.java.sun.com/developer/bugParade/bugs/4614956.html に、この問題の説明があります。次善策: Sun JRE 1.4.2_06 以降を使用してください。