Comments
Transcript
問題判別 ー参考ー 1 WASV7.0によるWebシステム基盤設計Workshop
WASV7.0によるWebシステム基盤設計Workshop 問題判別 ー参考ー 1 1.問題判別の心得 1-1 問題判別の基本 1-2 情報収集・問題判別ツール 2 2 ロギングレベルの変更 SystemOut.log (ログレベルInfo) [05/09/16 16:12:54:781 JST] 0000000a ManagerAdmin I TRAS0017I: 開始トレース状態は *=info: com.ibm.ws.webcontainer.httpsession.SMSessionContextParameters=config:com.ibm.ws.w ebcontainer.httpsession.SessionContext=config:com.ibm.ws.webcontainer.httpsession.Sess ionMgrComponentImpl=config です。 [05/09/16 16:12:56:312 JST] 0000000a AdminInitiali A ADMN0015I: 管理サービスが初期設定されます。 [05/09/16 16:12:58:828 JST] 0000000a SystemOut O PLGC0057I: プラグイン構成サービスは正常に開始されました。 [05/09/16 16:13:18:297 JST] 0000001f VirtualHost E SRVE0164E: Web アプリケーション jvm は、 コンテキスト・ルート /JVM/* を使用しますが、これは Web アプリケーション {2} によってすでに使用中です。 Web アプリケーション {3} はロードされません。 [05/09/16 16:13:18:391 JST] 00000020 ResourceMgrIm I WSVR0049I: Default を jdbc/Default としてバインドしています [05/09/16 16:13:18:516 JST] 0000001f ApplicationMg W WSVR0101W: JvmHandsOn を開始中にエラーが発生しました SystemOut.log (ログレベルWarning) Warning以下のレベル(AuditやInfo)の情報は 書き込まれなくなる [05/09/16 16:00:02:219 JST] 0000000b SystemOut O PLGC0057I: プラグイン構成サービスは正常に開始されました。 [05/09/16 16:00:20:781 JST] 0000001b VirtualHost E SRVE0164E: Web アプリケーション jvm は、 コンテキスト・ルート /JVM/* を使用しますが、これは Web アプリケーション {2} によってすでに使用中です。 Web アプリケーション {3} はロードされません。 [05/09/16 16:00:21:266 JST] 0000001b ApplicationMg W WSVR0101W: JvmHandsOn を開始中にエラーが発生しました Fine以上にすると、SystemOut.logに加え、 trace.logが取られ、詳細な情報がTrace.logに記載される trace.log (ログレベルFine) [05/09/16 14:41:48:656 JST] 0000000a ManagerAdmin I TRAS0017I: 開始トレース状態は *=fine: com.ibm.ws.webcontainer.httpsession.SMSessionContextParameters=config:com.ibm.ws.web container.httpsession.SessionContext=config:com.ibm.ws.webcontainer.httpsession.Session SystemOut.log (Fineの内容はない) MgrComponentImpl=config です。 [05/09/16 14:41:48:656 JST] 0000000a [05/09/16 14:41:49:750 JST] 0000000a TraceNLS 1 No message text associated with com.ibm.ws.webcontainer.httpsession. key Next.clean.up.set.for.Fri.Sep.16.18:20:00.JST.2005 in bundle com.ibm.ws.ffdc.res .webcontainer.httpsession.SessionCon ources.FFDCMessages [05/09/16 14:41:50:125 JST] 0000000a [05/09/16 14:41:49:734 JST] 0000000a FFDCJanitor 1 com.ibm.ws.ffdc.FFDCJanitor setNextCle anupTime Next clean up set for Fri Sep 16 18:20:00 JST 2005 3 [05/09/16 14:41:49:750 JST] 0000000a TraceNLS 1 No m 上記例がそれぞれのレベルでのSystemOut.logとtrace.logです。警告(warning)レベルに設定すると、 それ以下のレベルの情報は書き込まれなくなりますので、監査(Audit)、情報(Info)レベルの情報は SystemOut.logには書き込まれません。また、詳細-中(fine)の場合は、SystemOut.logに加え、さらに trace.logがログレベルfineで書き込まれます。 3 trace解析ツール - Trace and Request Analyzer GUIベースのTrace解析ツール 以下からフリーで入手可能 ¾ http://www.alphaworks.ibm.com/tech/tra 以下のコマンドにて起動し、ファイルを選択する java –jar <HRA_ROOT>¥tra<version>.jar ¾ ¾ ¾ WebSphere Trace HTTP Plugin Trace WebSphere MQ JMS Trace 4 trace解析ツールにIBM Trace and Request Analyzer for WebSphere Application Serverがあります。 Trace and Request AnalyzerはJavaで書かれたtrace解析用のツールであり、Javaが動作できる環境で あれば、全てのプラットフォームで利用出来ます。操作はすべてGUIから実行できるのが特徴です。 Trace and Request Analyzerの起動は、以下のコマンドを実行します。 Trace and Request Analyzer 起動後、ファイルを選択して下さい。 #java –jar <TRA_ROOT>¥tra<version>.jar (<TRA_ROOT>はTrace and Request Analyzerをインストー ルしたディレクトリを指します) ・WebSphere Trace ・HTTP Plugin Trace ・WebSphere MQ JMS Trace 4 2.問題判別 2-1 ログ、トレース 2-2 JVM問題判別 2-3 症状別問題判別 5 5 HeapDump解析ツール - MDD4J GUIベースのHeapDump解析ツール ISAより起動し、プライマリー・メモリー・ダンプ・URLにHeapDumpファイルを 入力する アップロードと分析をクリックする HeapDumpファイル名の入力 解析する際にクリックする 6 HeapDump解析ツールの一つにMDD4Jがあります。ISAを起動し、「ツール」→「製品」からJava 用メ モリー・ダンプ診断 (MDD4J)を選択して下さい。 その他、当ページでは以下を実施する事が出来ます。 1.プライマリー・メモリー・ダンプ・ファイル URL 入力ボックスに、ヒープ・ダンプ・ファイルを指す URL を入力して、「アップロードと分析」ボタンをクリックし、単一ダンプ分析機能を起動します。 2.ペアのヒープ・ダンプ・ファイルを指す 2 つの URL を 1 つはベースライン・メモリー・ダンプ・ファイル URL 入力ボックスに、もう 1 つはメモリー・ダンプ・ファイル URL 入力ボックスに入力して「アップロード と分析」ボタンをクリックし、比較分析機能を起動します。 3.メモリー・ダンプ URL の例: a.GZIP 圧縮した PHD ダンプへの HTTP URL: http://productionmachine/opt/WebSphere/AppServer/profiles/default/heapdump.20040819.115809.3716.phd.gz b.GZIP 圧縮した HPROF ダンプへの HTTP URL: http://productionmachine/opt/WebSphere/AppServer/profiles/default/hprof20040813.txt.gz c.解凍した IBM TXT ダンプへの HTTP URL: http://productionmachine/opt/WebSphere/AppServer/profiles/default/heapdump20820.1090614135.txt d.SVC ダンプへの FTP URL: ftp://userid:password@productionmachine/opt/WebSphere/AppServer/profiles/default/dump1.bin e.ローカル・ファイル・システムにある IBM TXT ダンプへのファイル URL: file:///c:/WebSphere/AppServer/profiles/default/heapdump20820.1090614135.txt f.ローカル Windows ファイル・システムにある IBM TXT ダンプ・ファイルへのパス: c:¥WebSphere¥AppServer¥profiles¥default¥heapdump20820.1090614135.txt 4.メモリー・ダンプ分析結果セクションのドロップダウン選択リストで、以前に実行された分析によって保 管された結果を含むディレクトリーを選択して、「分析結果のロード」ボタンをクリックし、分析結果を表 示します。すべての分析結果が、IBM サポート・アシスタント Java プロセスのデフォルト作業ディレクト リーに保管されています。「構成オプション」ページを介して分析結果を保管する代替作業ディレクト リーの構成が可能です。 5.構成オプションのリンクをクリックして、修正が可能な別の構成オプションを表示します。 6.ヘルプのリンクをクリックして、この文書を表示します。 6 MDD4Jを用いたHeapDump解析 (1/5) 分析サマリー 分析結果のサマリーと分析結果を表示するために行なう次の一連のステッ プを表示 分析結果のサマリーを確認する 次のステップを確認する 7 当ページでは、以下の内容を確認する事が出来ます。 分析結果のサマリー: プライマリーおよびベースライン・ダンプの全体の増加、比較分析機能で検出されたデータ構造サス ペクト数 (存在すれば)、到達サイズの最大ドロップがあるデータ構造サスペクト数、およびタイプ・サス ペクトとパッケージ・サスペクトの数がリストされます。 メモリー・ダンプ・コンテンツのサマリー: プライマリーおよびベースライン・ダンプに関する情報が表示されます。 次のステップ: 分析結果ページと相互作用可能な、さまざまな次のステップがリストされます。このセクションでの最 初の 3 つのアクションにより、次の 3 つのタブ (サスペクト、コンテキストとコンテンツの探索、およびブ ラウズ) へ誘導されます。その 3 つのタブでは、最大サスペクトに関連のある情報が強調表示されます。 4 番目のアクションを選択して、アプリケーション Java ヒープの占有スペースへの主なコントリビュー ターを表示できます。4 番目のアクションを選択して、メモリー・ダンプ内で検出されたすべてのルート・ オブジェクトを「ブラウズ」タブに表示できます。6 番目のオプションを選択して、すべてのオブジェクトと 型を表示する表形式で Java ヒープのすべてのコンテンツをリストできます。7 番目のオプションを選択 して、分析結果をテキスト形式で表示できます。このテキスト・ファイルは、分析結果の要約版を伝える のに使用できます。8 番目のオプションを選択して、分析の結果を削除できます。これは、ハード・ドラ イブから分析結果ディレクトリーを削除し、対応するメモリー・ダンプから、分析結果を再計算する必要 があります。9 番目である最後のオプションは、この分析セッションのメモリー・セッション状態にあるす べてを閉じて、初期入力ページに戻ります。 7 MDD4Jを用いたHeapDump解析 (2/5) サスペクト 以下の4 つのタイプのサスペクトを表示 ¾ ¾ ¾ ¾ 増加に最も寄与するデータ構造 到達サイズにおいて大きなドロップが起きているデータ構造 大量のインスタンスを持つオブジェクトのタイプ 大量のオブジェクト・インスタンスを持つ Java パッケージ) オブジェクト毎のインスタンス数、バイト数を確認する パッケージ毎のインスタンス数を確認する 8 当ページでは、以下の内容を確認する事が出来ます。 ・比較分析技法によって検出されたデータ構造または領域 各データ構造サスペクトに対して、領域の増加サイズおよびプライマリー・ダンプでの領域の実際の サイズを伴ってリーク・ユニット・タイプが表示されます。領域の実際のサイズは、合計ヒープ・サイズの パーセントとして表示されます。データ構造サスペクトは、リーク・ユニットの増加数の結果および領域 の実際のサイズに従って、ランク付けされます。デフォルトでは、最初のデータ構造サスペクトが選択さ れます。大幅な増加のあるデータ構造サスペクトが検出されない場合は、このセクションは表示されま せん。 ・単一ダンプ分析技法によって検出された、コンテナー・オブジェクトの到達サイズで大きなドロップを 持つデータ構造 到達サイズで大きなドロップを持つ各データ構造サスペクトに対して、コンテナー・オブジェクトのオ ブジェクト・タイプが、コンテナー・オブジェクトの到達サイズと、最大到達サイズを持つ子オブジェクト の到達サイズへのコンテナー・オブジェクトの到達サイズでのドロップを伴って表示されます。大きなド ロップを持つデータ構造サスペクトは、到達サイズのドロップに従ってソートされます。比較分析技法、 または単一ダンプ分析で検出されたデータ構造サスペクトがない場合は、デフォルトで、最初のドロッ プ・サスペクトが選択されます。到達サイズの大きなドロップを持つデータ構造が検出されない場合は、 このセクションは表示されません。 ・プライマリーおよびベースライン・ダンプ内でインスタンス数の最大増加が起こっているオブジェクト・ タイプ 多くのメモリー・リーク事例において、サスペクトを持つオブジェクト・タイプのインスタンスのすべてが、 リーク・データ構造の一部ではなく、増加オブジェクト・タイプのすべてがリークしているわけではありま せんが、大幅な増加のあるオブジェクト・タイプは、しばしば、メモリー・リークに関与しています。 ・プライマリーおよびベースライン・ダンプ内でインスタンス数の最大増加が起こっているオブジェクトの Java パッケージ名 パッケージ名は、メモリー・リークに関与するアプリケーション・コンポーネントを示します。 また、任意のサスペクト・テーブル行をクリックすると、そのサスペクトが強調表示され、選択したサス ペクトに関連した別のタイプのサスペクトのすべてを表示出来ます。 8 MDD4Jを用いたHeapDump解析 (3/5) コンテキストとコンテキストの検索 プライマリー・メモリー・ダンプの Java ヒープの占有スペースへの ¾ ¾ 主なコントリビューターのオーナーシップ・コンテキストのグラフ グラフで選択されたノードのコンテンツを表示 (オブジェクト・タイプ、インスタンス数、バイトの表示) 9 当ページでは、以下の内容を確認する事が出来ます。 「コンテキストとコンテンツの探索」タブは、タブ・ヘッダーをクリックするか、フレームの下部にある「次 へ」ボタンをクリックするか、「分析サマリー」タブの「次のステップ」セクションの 2 番目のステップをク リックすることで表示できます。 このタブは、「コンテキストとコンテンツの探索」に示すように Java ヒープの占有スペースへの主なコ ントリビューターのオーナーシップ・コンテキストを表示します。「サスペクト」タブで選択された任意のサ スペクト行に対して、占有スペース内で対応する主なコントリビューター・ノードが選択されます。占有 スペース内のこれらの選択された各ノードに対して、ノードのサイズに大きく寄与するオブジェクトのタ イプが、コンテンツ・セクションに表示されます。 選択されたサスペクトのために強調表示されているノードを除いて、オーナーシップ・コンテキストに ある他のノードは、ノード・テーブルの行をクリックすることによっても選択できます。これによって、コン テンツ・テーブルが更新され、選択したノードで最大インスタンス数を持つ大きなオブジェクト・タイプを 表示します。 選択されたサスペクトに対して、「ノードの選択」ボタンは、選択されたサスペクトを含むオーナーシッ プ・コンテキスト内のノードのみを強調表示します。 選択されたデータ構造サスペクトまたはドロップ・サスペクトに対しては、「ブラウズ」ボタンで、「ブラウ ズ」タブに進み、サスペクトの場所を探索されている深さ優先検索ツリーの特定の部分を表示します。 9 MDD4Jを用いたHeapDump解析 (4/5) ブラウズ オブジェクト参照グラフの深さ優先全探索に基づいたツリー表示で、プライ マリー・メモリー・ダンプのすべてのコンテンツを表示 10 当ページでは、以下の内容を確認する事が出来ます。 「ブラウズ」タブは、タブ・ヘッダーをクリックするか、フレームの下部にある「次へ」ボタンをクリックす るか、「分析サマリー」タブの「次のステップ」セクションの 3 番目のステップをクリックすることでアクセス できます。「ブラウズ」タブは、「コンテキストとコンテンツの探索」タブで、選択されたデータ構造または ドロップ・サスペクトに対する「ブラウズ」ボタンをクリックすることによってもアクセスできます。 「ブラウズ」タブでは、デフォルトでは、ツリーが、選択されたデータ構造サスペクトのリーク・コンテ ナーまで展開されています。デフォルトでは、最初のデータ構造サスペクトが選択され、対応するリー ク・コンテナーまでツリーが展開されます。他のサスペクトへツリーを展開するには、「サスペクト」タブで、 そのサスペクトを選択する必要があります。 「ブラウズ」タブには、オブジェクト参照グラフの深さ優先全探索に従って構成されたツリー表示で、 プライマリー・ダンプのすべてのコンテンツを表示します。展開されたノードの子は、深さ優先全探索 中に計算された合計到達サイズの順番に表示されます。先頭 20 個の子のみが展開されたノードに 表示されます。それ以上の子を表示する場合は、親ノードを選択せずに、左側のパネルで「子の追加 表示」アクションを選択する必要があります。 ツリー内の各ノードには、オブジェクト ID (アドレス)、オブジェクトの種類 (クラス、オブジェクト配列、 プリミティブ配列)、および型名が表示されます。ツリー表示で任意のノードの情報をさらに表示するに は、ノードを選択する必要があります。すべての親 (ノードへの入力参照) を含む、選択したツリー・ ノードの追加情報が左に表示されます。親テーブルの任意の行をクリックして、親ノードまでツリーを展 開できます。 「ブラウズ」タブで使用可能なその他のアクションは、後で特定のオブジェクトをアドレス毎に表示お よび検索できるように、ツリー・ノードにブックマークを付ける能力があります。 10 MDD4Jを用いたHeapDump解析 (5/5) オブジェクト・テーブル すべてのメモリー・ダンプ情 報を表示する タイプ・テーブル インスタンス数を表示する 11 当ページでは、以下の内容を確認する事が出来ます。 <オブジェクト・テーブル> 「オブジェクト・テーブル」タブは、「分析サマリー」タブの「次のステップ」セクションの 6 番目のステッ プをクリックすることでアクセスできます。 「オブジェクト・テーブル」に示されるオブジェクト・テーブルは、プライマリー・メモリー・ダンプ内のす べての項目をページに表示します。特定のページは、ページ番号を選択するか、「ページに進む」ボ タンをクリックするか、「前のページ」または「次のページ」ボタンをクリックすることで選択できます。オブ ジェクト・テーブルは列ヘッダーをクリックすることでソートできます。 オブジェクト・テーブル内に表示 される項目は、使用可能なフィルターのリストからフィルターを適用し、フィルター値を指定して、「フィ ルター」ボタンをクリックすることにより、フィルターに掛けることができます。たとえば、1KB より大きなサ イズのオブジェクトは、「サイズ」>「フィルター」を選択して、フィルター値に 1024 バイトを指定すると表 示されます。 <タイプ・テーブル> 「タイプ・テーブル」タブは、「分析サマリー」タブの「次のステップ」セクションの 6 番目のステップをク リックし、「タイプ・テーブル」タブを選択することでアクセスできます。 タイプ・テーブルに示されるタイプ・テーブルは、他のオブジェクト・タイプのすべてとこれらの各型のイ ンスタンス数を表示します。タイプ・テーブルは、オブジェクト・テーブルと似た方法で操作できます。 11 【ご注意下さい】JVM5.0 SR5未満の環境では、OutOfMemoryError発生時に JavacoreおよびHeapdumpが出力されません JVM5.0 SR5未満の場合、障害によりOutOfMemoryError時にJavacore またはHeapdumpが出力されない 対応方法(以下の3つ内、1つを選択ください。) 1. 2. 3. JVMのバージョンを5.0.0 SR5以上にアップグレードする アプリケーション側で、OutOfMemoryErrorをキャッチしてスローする 管理コンソールで以下のいずれかを設定する ¾ ¾ アプリケーション・サーバー > <アプリケーション・サーバー名>Java およびプロセス管理>プ ロセス定義>環境エントリーを選択し以下のパラメータを追加 名前:IBM_HEAPDUMP_OUTOFMEMORY 値:true 名前:IBM_JAVADUMP_OUTOFMEMORY 値:true アプリケーション・サーバー > <アプリケーション・サーバー名>Java およびプロセス管理>プ ロセス定義>環境エントリーを選択し以下のパラメータを追加 名前:JAVA_DUMP_OPTS 値: ONERROR(JAVADUMP,SYSDUMP),ONEXCEPTION(JAVADUMP,SYSDUMP),ONDUMP(JAV ADUMP),ONOUTOFMEMORY(JAVADUMP,HEAPDUMP) (注意) JVM5.0 SR2では対応可能な事を確認済み JVMがその他のバージョンの場合には、確認テストを行ってください 12 JVMでは、デフォルト設定でJavacoreおよびHeapdumpが出力されるようになっていますが、JVMの バージョンによっては、障害によりOutOfMemoryError時にJavacoreまたはHeapdumpが出力されない ことが確認されています。 JavacoreおよびHeapdumpは問題解析の際にとても大切な情報であり、問題発生時にこれらの情報が 出力されることは問題の早期解決につながります。 よって、上記の対応策を早期に実施されることをお勧め致します。 12