WebSphere Application Server v5.1 Resource Monitoring Guide

WebSphere Infrastructure Guide ISE Transaction System WebSphere Infrastructure Guide WebSphere Application Server v5.1 Resource Monitoring Guide ISE Transaction System Agenda WebSphere Infrastructure Guide        WASリソース・モニタリング概要 Tivoli Performance Viewer Tivoli Performance Viewer Performance Data Counters パフォーマンス・サーブレット PMIクライアント・アプリケーション verbosegc Heap Watcher WebSphere Infrastructure Guide WASリソース・モニタリング概要 WASシステムにおけるリソース・モニタリング・ポイント WebSphere Infrastructure Guide 【OSリソース】 CPU、メモリ、ディスクの使用状況 プロセス状況・・・・・ 【WASリソース】 JVMヒープ使用率、JDBC接続プール数、 Webコンテナースレッド使用率、セッショ ン作成数、GC発生率・・・・・ Webサーバー プラグイン WAS DB 【ネットワーク】 ネットワーク状況 【DB】 DB接続数、SQL Statement数 ロックの数、・・・・ PMI(Performance Monitoring Infrastracture) WebSphere Infrastructure Guide   WASのパフォーマンス・データを取得するためのフレームワークです。 パフォーマンス・データが格納されているMBeanと通信して、パフォー マンスデータを取得します。 PMI JVMヒープ使用率、JDBC接続プール数 Webコンテナースレッド使用率、セッショ ン作成数、GC発生率・・・・・ MBean プラグイン MBean MBean MBean MBean MBean DB Webサーバー MBean MBean MBean WAS PMIにおけるパフォーマンス取得方法 WebSphere Infrastructure Guide Tivoli Performance Viewer PMI クライアント アプリケーション パフォーマンス サーブレット PMI プラグイン MBean Webサーバー MBean MBean MBean DB MBean MBean WAS WebSphere Infrastructure Guide Tivoli Performance Viewer Tivoli Performance Viewerとは WebSphere Infrastructure Guide       WAS V5 に同梱されているGUIのパフォーマンス・モニターツール パフォーマンス・データはグラフ(左下)とテーブル(右下)の2通りで表示 リアルタイムでパフォーマンス・データを表示 ログの取得、再生が可能 ND版を使用している場合はデプロイメント・マネージャーに接続し、 BASE版を使用している場合はアプリケーション・サーバーに接続 サーバーへの接続はローカルとリモートの両方で可能 TivoliPerformanceViewerのみのインストール WebSphere Infrastructure Guide  リモートからのサーバーへ接続する場合、 TivoliPerformanceViewerのみのインストールが可能です。 インストール終了 WAS導入時と同じディレクトリー構成になります。 グローバル・セキュリティを使用しているWASへの接続準備(1)   サーバー接続時に認証に必要なユーザーIDとパスワードを提供する 必要があります。 以下のユーザーIDとパスワードが有効です。   WebSphere Infrastructure Guide ユーザーレジストリーの構成で設定した、サーバー・ユーザーIDとパスワード 管理コンソールのコンソールユーザーのIDとパスワード(ロールはいずれでも可)  ユーザーIDとパスワードの情報は、プロパティファイルで設定します。 SOAPで接続する場合   /properties/soap.client.props を以下のように編集します。 ----省略-----com.ibm.SOAP.securityEnabled=true ----省略-----com.ibm.SOAP.securityEnabled=false #JMX SOAP connector identity com.ibm.SOAP.loginUserid= com.ibm.SOAP.loginPassword= ----省略------ #JMX SOAP connector identity com.ibm.SOAP.loginUserid=UERID com.ibm.SOAP.loginPassword=PASS ----省略------ グローバル・セキュリティを使用しているWASへの接続準備(2) WebSphere Infrastructure Guide  RMIで接続する場合  プロパティファイルの編集をしなくても、接続時にポップアップ・ウィンドウ が立ち上がるので、その際にユーザーIDとパスワードを入力します。  /properties/sas.client.props ファイルを以下のように編集し ます。 ----省略-----com.ibm.CORBA.loginSource=properties #RMI/IIOP user identity com.ibm.CORBA.loginUserid=UERID com.ibm.CORBA.loginPassword=PASS ----省略------ ----省略-----com.ibm.CORBA.loginSource=prompt #RMI/IIOP user identity com.ibm.CORBA.loginUserid= com.ibm.CORBA.loginPassword= ----省略------ PMIを使用するための準備  サーバーのパフォーマンス・モニター・サービス始動(必須)  WebSphere Infrastructure Guide 管理コンソールで[アプリケーション・サーバー]-<サーバー名>-[パフォーマンス・モニター・サービ ス]より「構成」タブの「始動」にチェックし、サーバーの再始動をします。 TivoliPerformanceViewer起動後にも設定可能です。 各パフォーマンス・データ項目にモニターレベルを設定できます。 モニターレベルは 「N(なし)」、「L(低)」、「M(中)」、「H(高)」、「X(最大)」 の5段階あります。 「構成」タブでのモニター・レベルの設定は「保管」後にサーバーの再始動が必要です。「ランタイ ムタブ」での設定はサーバーの再始動は必要なく「保管」後にTivoliPerformanceViewerで「最新 表示」を行うと反映されます。 beanModule=H cacheModule=H connectionPoolModule=H j2cModule=H jvmRuntimeModule=H orbPerfModule=H servletSessionsModule=H systemModule=H threadPoolModule=H transactionModule=H webAppModule=H webServicesModule=H wlmModule=H wsgwModule=H  モニターレベルの設定     TivoliPerformanceViewerの起動 WebSphere Infrastructure Guide  コマンドラインからホスト名、ポート番号、コネクタータイプを指定 して起動  >tperfviewer.bat <ホスト名> <ポート番号> <コネクタータイプ>  コネクタータイプはSOAPかRMIを選択 モニター・レベルの設定(1) WebSphere Infrastructure Guide   パフォーマンス・データ取得の際の項目を調整 [データ収集]を選択してモニター・レベルを設定    なし:データ収集しない 標準:すべてのモジュールを高(H)に設定 カスタム:リソースごとに自由に設定可能  TivoliPerfoemanceViewerのモニター・レベルの設定は管理コンソー ルへも反映  管理コンソールと同時起動での設定変更は、管理コンソール側で「ワークスペース の競合が発生」エラーが出ます モニター・レベルの設定(2) WebSphere Infrastructure Guide  モニター項目の最小単位でモニター・レベルの設定可能 server1 Enterprise Bean EJB.jar 1 エンティティーBean メッセージ・ドリブンBean 動的キャッシング ステートレス・セッションBean JDBC Driver1 データソース1 JDBC接続プール JVMランタイム ガーベッジ・コレクション モニター オブジェクト スレッド ORB インターセプター インターセプター1 Webモジュール1 サーブレット・セッション・マネージャー スレッド・プール メッセージ・リスナー オブジェクト・リクエスト・ブローカー ProcessDiscovery Webコンテナー SoapConnectorThreadPool トランザクション・マネージャー ワークロード管理 クライアント サーバー モニター・レベルの変更 WebSphere Infrastructure Guide  TivoliPerformanceViewerでの変更   モニター・レベルの変更はビューアーにリアルタイムに反映 低レベル→高レベル  増加するモニター項目については、変更時点からデータ取得を開始  変更前のデータは表示されない  高レベル→低レベル  減尐するモニター項目と、そのデータは削除  管理コンソールでの変更(ランタイムタブ)  低レベル→高レベル  変更はビューアーにリアルタイムに反映  増加するモニター項目については、変更時点からデータ取得を開始  変更前のデータは表示されない  高レベル→低レベル  「最新表示」実行後にビューアーに反映  減尐するモニター項目とそのデータは削除 ビューアーにおけるデータ表示方法(1) WebSphere Infrastructure Guide    ウィンドウの左のツリーでモニターするリソースを選択できます。 ウィンドウの右下に各リソースのモニター・データが表示されます。 モニター・データで選択された値のみがビューアーに表示されます。 選択したデータをビューアーに表示 ビューアーにおけるデータ表示方法(2) WebSphere Infrastructure Guide   「目盛り」値は実際のデータと「図表表示」での値との倍率を示し、値の 編集で、「図表表示」の拡大・縮小が可能です。 Ctrlキーを使用して複数のリソースの選択が可能です。 複数のリソースの選択が可能 実際の値に3.0×0.0001 を乗じた値が図表に表示 データの表示設定 WebSphere Infrastructure Guide [設定]-[データの表示]から取得データの表示方法以下の3つに設定できま す。  未加工の値:データの値をそのまま表示  値の変更:データが統計値を示す場合、一つ前の値からの増減を表示  変更率:データを1つ前の値と比較して値の変更を比率を表示します。    「変化量/(T1-T2)」という比率が表示 変化量は直前の値から現行値までの変化量 T1は現行値が検索された時刻、T2は直前の値が検索された時刻を表します。 未加工の値 値の変更 変更率 ビューアーの表示設定 WebSphere Infrastructure Guide  バッファーサイズの設定  [設定]-[バッファーサイズの設定]からビューアーに表示されるプロット数を設定できま す [設定]-[最新表示速度の設定]からデータ取得の間隔を秒で指定可能です ビューアーでのプロット間隔になります  最新表示速度の設定   <バッファー・サイズの設定=40> <最新表示速度=5> <バッファー・サイズの設定=20> <最新表示速度=5> データ取得開始点 WebSphere Infrastructure Guide  データの取得はサーバー起動時を開始点として、取得しています。   統計値や平均値の基準となるデータ取得開始点はサーバー起動時に なります。 サーバー再起動でデータはリセットされます。  モニター表示されるのはTivoliPerformanceViewerの開始時間か らとなります。 サーバー再起動で データはリセットされる データの最新表示   選択したリソースに対して、ツール・バーの[ファイル]-[最新表示]から、新 規データの取得が可能になります。 以下の操作をランタイムに行った場合、最新表示を行う必要があります。   WebSphere Infrastructure Guide  管理コンソールより、モニター・レベルの設定を変更した場合 アプリケーション・サーバーに新しいリソースを作成し、そのリソースが使用された場合 既存のリソースが、データ取得開始後に使用された場合  データソースは作成されていても、使用されるまでモニター項目上には表示されず、使用され てから最新表示の操作を行うことでモニター項目に表示されます。  アプリケーション・サーバーを、TivoliPerformanceViewer開始後に始動する場合  サーバー構成がTivoliPerformanceViewerに正確に反映されるために、最新表示を行います。 最新表示 「最新表示」後から データ表示を開始 データのリセット操作(1) WebSphere Infrastructure Guide ツール・バーの[設定]から以下2つのデータのリセット操作が可能です  バッファーのクリア   表とグラフに現在表示されている値を削除します データ取得の停止後に行うと表から残りのデータを削除できます  ゼロにリセット     取得データには、ゼロにリセットできるものとできないものがあります。 データがそのデータが取得されてからの相対値である場合、そのデータはゼロになり、 操作以降の相対値を表します。(累積値、平均値) データがリアルタイムの状態を表すロード・データである場合、リセットできないので影 響はありません。 この操作でバッファーのクリアも行われます データのリセット操作(2) ① 使用メモリー:ロード・データ GCの呼び出し回数:相対値 WebSphere Infrastructure Guide バッファーのクリア ② ③ ゼロにリセット ④ ⑤ ログの取得と再生 WebSphere Infrastructure Guide  取得方法(オン/オフ)    取得データをログとしてファイルに出力することが可能です [ロギング]-[オン]を選択して、ログファイルの保管ディレクトリー、ファイル名、ファイ ルタイプを指定すると、ロギングが開始します。 デフォルトでは以下のディレクトリー下のファイルに出力されます。  /logs/tpv_mmdd_hhmm.xml  以下のファイルタイプを選択できます。  XMLファイル(*.xml)  バイナリー・ファイル(*.perf)  [ロギング]-[オフ]を選択すると、ロギングが終了します。 [ファイル]-[ログ]を選択して、ログファイルを指定します [設定]-[ログの再生]を選択するとログの再生が開始します。ログの再生には、早送 り、停止、巻き戻しの操作機能があります。  再生方法   ロギング中の設定変更 WebSphere Infrastructure Guide      ロギング中にデータのリセットを行うとログにも反映されます。 ロギング中にモニター・レベルの変更を行うと、ログ再生時も同様の動 作で、モニター項目の増減が反映されます。 ロギング中にDMを停止してもデータ取得は可能です。 ロギング中にNodeAgent、アプリケーション・サーバーの再始動を行う と、停止中の値が抜けたデータがログに残ります。 ロギング中にTivoliPerformanceViewerを停止させると、その時点でロ ギングも停止します。 WebSphere Infrastructure Guide Tivoli Performance Viewer Performance Data Counters 主要モニタリング・ポイントにおける取得データ WebSphere Infrastructure Guide Webコンテナースレッド -アクティブなスレッド数 -プールサイズ HTTPセッション -アクティブセッション数 -セッションオブジェクトサイズ HTTP Session Webコンテナー Data Source DB EJBコンテナー JVM JVMランタイム -ヒープ使用状況 -GC発生率 JDBC接続プール -接続プールサイズ -StatementCache廃棄数 WAS 「JVMランタイム」におけるモニター項目 WebSphere Infrastructure Guide  WASが稼動するJVMについてのデータを取得 データ名 空きメモリー(KB) 使用メモリー(KB) JVMアップ時間 合計メモリー(KB) GCの呼び出し数 GCの平均所要時間(ミリ秒) 割振りオブジェクト数 空きオブジェクト数 移動オブジェクト数 開始スレッド数 非活動スレッド数 ロック待機数 ロック待機平均時間 レベル 低 低 低 高 最大 最大 最大 最大 最大 最大 最大 最大 最大 ヒープの空きメモリー・サイズ ヒープの使用メモリー・サイズ JVMプロセスが起動してからの経過時間 JVMヒープサイズ GCが発生した合計数 2回のGC間の平均時間 1回のGCが要する時間の平均 ヒープ領域に割り当てられたオブジェクト数の合計 GCによってヒープ領域から開放されたオブジェクト数の合計 GCのCompaction処理によって移動したオブジェクト数の合計 開始したJavaスレッド数の合計 終了したJavaスレッド数の合計 JavaスレッドがJavaモニターを待機する合計回数 JavaスレッドがJavaモニターを待機する平均時間 GC呼び出し間の平均時間(ミリ秒) 最大 JVMプロセス上のすべてのスレッドに対しての値を取得 モニター・レベル「最大」のデータを取得するための準備 WebSphere Infrastructure Guide    JVMPIを使用可能にする必要があります 管理コンソールよりアプリケーション・サーバーのJVMの設定で汎用引数に 「-XrunpmiJvmpiProfiler」を定義し、保管してからアプリケーション・サー バーを再起動します ただし、JVMPIを使用するとパフォーマンスに影響を与えます。  JVMPIを使用したパフォーマンス検証結果をご参照ください。 (参考)JVMPI(JVM Profiler Interface) WebSphere Infrastructure Guide  JVMPIとは   JVMの実装とともに機能するプロファイラを開発する目的で提供されているインター フェースです JVMとProfilerAgentとの間で双方向に関数を呼び出します JVMPI イベント通知 JVM コントロール リクエスト Profiler Agent Profiler Profiler Process JVM Process JVMPI イベント通知 JVM コントロール リクエスト pmiJvmpi Profiler Tivoli Performance Viewer JVMランタイムにおけるチューニング・ポイント WebSphere Infrastructure Guide  GarbageCollection発生時のメモリー解放率(%)    (GCで解放されたメモリー量)/(GC直前の使用メモリー量)×100 85%以上の場合は最大Javaヒープサイズが大きすぎるので減尐させた方がよい 小さすぎる場合は、最大Javaヒープサイズを増加させた方がよい。   GC直後の使用メモリー量は一定であることが望ましい。増加傾向にある場 合はメモリーリークの可能性があります。 解放量/解放率が徐々に小さくなるほど、メモリーが逼迫されています。 GC発生 JVMPIの使用におけるチューニング・ポイント WebSphere Infrastructure Guide  全体の実行時間に対するGCの所要時間の割合   GC平均所要時間%=(GC平均所要時間)/(GC平均所要時間+GC呼び出し間平均 時間)×100 13%未満であることが望ましいと言われています。  13%以上になると、HeapExpansionが発生してしまいます。   GC平均所要時間が3秒以上の場合は、最大Javaヒープサイズの減尐 を検討した方がよい GC呼び出し間の間隔が短くなればなるほどヒープは逼迫されていま すので最大Javaヒープサイズの増加を検討する必要があります。 -Xms -Xmx (参考)GCの仕組み(1)  heap Step1 Step1 Heap Allocation  WebSphere Infrastructure Guide Cache Allocation   Thread Local Allocation Bufferを使用 主に512byte以下の小さなオブジェクトの割当て に使用 512byte以上のオブジェクトやCache Allocation に失敗した場合 オブジェクトがHeap領域に割り当てられるか、十 分なHeapが確保できないと判断されるまで HEAP_LOCKがかかる オブジェクト(使用中) オブジェクト(使用されていない)  Heap Lock Allocation   走査 heap 走査 走査 × Step2 ① Allocation Failure  Step2 Garbage Collection  heap Step2 ② GCが終了するまで、全てのアプリケーション・ スレッドは停止状態となる   使用されているオブジェクトにマーキング マークされていないオブジェクトをHeap上から 削除メモリを解放 断片的に存在しているオブジェクト間の空きス ペースを詰め、Fragmentationを解消 GCの中で負荷が最も高い処理なので、できるだ け回避される(Compaction Avoidance) ① Mark Phase ② Sweep Phase ③ Compaction Phase   heap Step2 ③ heap Step1 heap Step2 (参考)GCの仕組み(2) WebSphere Infrastructure Guide  GC発生するが、必要なサイズの空き領域を 確保できない Step3 Heap Expansion   Heap Expansion発生中は全てのアプリケーショ ン・スレッドは停止状態 発生条件    GCを実施しても、要求されたオブジェクト分の空き 領域が確保できなかった場合 空き領域が-Xminf(最小空き領域、デフォルト0.3) の割合よりも小さくなった場合 GC時間が全体の13%を上回った場合 heap heap拡張 Step3 -Xminf(最小空き領域)分の空き領域が確保でき る程度に拡張 heap Step1  拡張サイズは-Xmaxe、-Xmineで設定可能  Stepα Heap Shrinkage   heap GCが発生 Heap Shrinkage発生中は全てのアプリケーショ ン・スレッドは停止状態 発生条件   空き領域の割合が-Xmaxf(最大空き領域、デフォ ルト0.6)を上回っている場合 且つ以下の条件が全て当てはまる場合  -Xmaxfが1(100%)に設定されていない  過去3回のGCでExpansion発生していない  System.gc( )により発生した場合、開始時に 空き領域が-Xminf以上あった heap heap縮小 Step α 空き領域 > 60% GC発生後空き領域が-Xmaxf(最大空き領域)の 割合以上 heap 空き領域 = 60% (参考)Compaction Avoidance WebSphere Infrastructure Guide  Compactionの発生条件  -Xnocompactgcオプションが指定されていず、且つ以下の条件の一つでもTrueだった場合  -Xcompactgcオプションが指定されている  前のSweep Phaseで要求されたHeap領域を確保できなかった  System.gc()がコールされ、かつ前回のGCでCompactionが行われなかった場合  Active Heapの空き領域が5%未満、もしくは128KB未満の場合  Compaction Avoidance  CompactionはGCの中でも最も負荷が高いため、できるだけCompactionを発生 させたくない LOA  Wilderness preservation  Wilderness(LOA)と呼ばれる領域をあらかじめ、Heapの中に確保  ActiveなHeap領域の終わりにデフォルト5%の領域が確保される  使用のされ方により、大きさは拡大・縮小する  Allocation Failureが発生した際に  最低空き領域以上Allocationが行われており、 要求される領域が64KB以下だった場合は、GCが発生  最低空き領域以上Allocationが行われていないか、 要求される領域が64KB以上だった場合、 Wilderness領域を用いてAllocationを行う -Xminf  JDK1.4.1からはLarge Object Area(LOA)に名称変更 -Xminf 「スレッド」におけるモニター項目 WebSphere Infrastructure Guide  WASにおける各スレッドのデータを取得 レベル 低 低 高 高 高 作成されたスレッドの合計数 破棄されたスレッドの合計数 同時にアクティブなスレッドの数とその平均値 プール内のスレッドの数とその平均値 すべてのスレッドが使用中である時間の平均パーセントとその平均値 データ名 スレッドの作成 スレッドの破棄 アクティブ・スレッド プール・サイズ 最大パーセント スレッド・プールのパラメーター WebSphere Infrastructure Guide    プール内のスレッドは最大サイズで設定した値まで作成されます。 プール内で使用されていないスレッドは、スレッド非活動タイムアウト経過後 に破棄されます。 最小サイズに設定した数だけは残されます。 Webコンテナー・スレッドにおけるチューニング・ポイント WebSphere Infrastructure Guide  すべてのスレッドが使用中である状態が続くようであれば、スレッドの最大サ イズの増加かスレッド数の制御を検討します。 スレッド使用率が100%の状態 (参考)WAS キューイング・ネットワーク WebSphere Infrastructure Guide    それぞれの入り口で待ち行列が発生するように徐々に絞り込むよう調整した方 がパフォーマンスが期待できる 一般に、WAS内で待たせるよりも、ネットワーク側で待たせる方がよい 負荷テストを行なった際に、それぞれのキューの最大数に達したときに、シス テムのCPUが適正使用率になるようパラメータを決定する クライアント EJBクライアントとEJBが同一JVMで稼動する場 合、両者は同一スレッド上で稼動する。 つまり、WebコンテナーEJBコンテナー間で待ち 行列は発生しない 待ち行列:25 WebServer 待ち行列:125 最大クライア ント数=75 75 Web Container 待ち行列:40 50 スレッド・プー ル・サイズ=50 EJB Container データソース 70 最大接続プー ル・サイズ=30 ORBスレッド・プール=20 リモート EJB クライアント DB 「JDBC接続プール」におけるモニター項目 WebSphere Infrastructure Guide  データ・ソースにおける接続プールの状況を表すデータ レベル 低 低 低 低 低 低 低 低 中 中 中 高 高 高 高 高 getConnection()によってプール内に作成された接続数の合計 保守スレッドサービスによってプールから破棄された接続数の合計 getConnection()によって使用されたプール内の接続数の合計 close()によって未使用になったプール内の接続数の合計 待機状態のスレッドが接続タイムアウトになる回数の合計 プール内の接続数(物理接続数) getConnection()によって与えられた接続ハンドルの数 廃棄されたPreparedStatementの合計数 接続が使用される平均時間(接続が割り振られる時刻から戻される時刻までの時間) 接続が割り振られるまでの平均待ち時間 JDBCドライバー内での実行にかかった時間 プールにある接続数とその平均 プールにある空き接続の数とその平均 プール内に使用可能な接続がなく同時に接続待ちをするスレッドの数と平均数 プール内の接続の使用率の平均パーセント すべての接続が使用中である時間の平均パーセント データ名 作成数 クローズ数 割り振り数 戻された数 障害 管理接続の数 接続ハンドルの数 PrepStmtキャッシュ廃棄 平均使用時間(ミリ秒) 平均待ち時間(ミリ秒) JDBC時間(ミリ秒) プール・サイズ 空きプール・サイズ 同時待機 使用率 最大パーセント 接続プールにおけるパラメーター WebSphere Infrastructure Guide       接続タイムアウト(秒):接続を待機した状態で、ConnectionWaitTimeoutExceptionが 発生するまでの間隔 最大接続数:プール可能な接続の最大数 最小接続数:プールに保持される接続の最小数 リープ時間:プール保守スレッドの実行される間隔 未使用タイムアウト:未使用接続に対して、接続を破棄する間隔(最小接続数は残して 破棄) 経過タイムアウト:未使用接続に対して、全ての接続を破棄する間隔 データソースにおけるパラメーター WebSphere Infrastructure Guide  ステートメント・キャッシュ・サイズの設定  該当データ・ソースの設定画面において、ステートメント・キャッシュ・サイズの設定を 行います。 作成数 WebSphere Infrastructure Guide Connection in use 新しく作成された接続 DB Connection in use Connection in use Connection in use Connection in use Connection in use DB getConnection() Connection in use Connection in use Connection in use ConnectionPool 最大接続数:6 最小接続数:2 ConnectionPool 作成数:プール内に新しく作成された接続の合計数 管理接続の数:プール内にある接続数 割り振り数 WebSphere Infrastructure Guide プール内にある未使用の接続を使用 DB DB Connection vacant Connection in use Connection in use getConnection() Connection in use Connection in use Connection in use Connection in use Connection vacant Connection in use Connection vacant Connection in use Connection in use ConnectionPool 最大接続数:6 最小接続数:2 ConnectionPool 割り振り数:プール内の接続で使用された接続の合計数 戻された数 WebSphere Infrastructure Guide プール内に戻された接続 DB DB Connection in use Connection vacant Connection in use Connection in use Connection vacant Connection in use Connection in use Connection in use close() Connection in use Connection vacant Connection in use Connection in use ConnectionPool ConnectionPool 最大接続数:6 最小接続数:2 戻された数:プール内の接続で使用されなくなった接続の合計数 障害 WebSphere Infrastructure Guide 接続が最大接続数に達している状態 DB Connection in use Connection in use Connection in use Connection in use 接続が空くのを待機 DB Connection in use Connection in use Connection in use getConnection() Connection in use Connection in use Connection in use Connection in use Connection in use ConnectionPool 接続タイムアウト経過後 ConnectionWaitTimeoutException ConnectionPool 最大接続数:6 最小接続数:2 障害:プール内に使用可能な接続がなく待機している要求に接 続タイムアウトによってConnectionWaitTimeoutException が発生する回数 未使用タイムアウトによるクローズ プール保守スレッドによって 接続が破棄 DB Connection vacant Connection vacant Connection vacant Connection vacant Connection vacant Connection vacant Connection vacant Connection vacant WebSphere Infrastructure Guide DB 未使用タイムアウト 経過 Connection vacant Connection in use Connection vacant Connection in use ConnectionPool ConnectionPool クローズ数:プール内の未使用接続に対して未使用タイムア ウトと経過タイムアウトによって破棄された接続数 最大接続数:6 最小接続数:2 経過タイムアウトによるクローズ WebSphere Infrastructure Guide Connection vacant Connection in use DB DB 経過タイムアウト 経過 Connection vacant Connection in use ConnectionPool ConnectionPool プール保守スレッドによって 接続が破棄 最大接続数:6 最小接続数:2 管理接続の数/接続ハンドルの数 WebSphere Infrastructure Guide 物理接続数 共用されていないとき Managed Connection Managed Connection DB getConnection() getConnection() Handle Handle ConnectionPool 共用されているとき Handle getConnection() getConnection() Managed Connection DB Handle ConnectionPool 管理接続の数:物理接続の数 接続ハンドルの数:getConnection()によって与えられた接続ハンドルの数 PreStmtキャッシュ廃棄 WebSphere Infrastructure Guide  PreparedStatementキャッシュ   一度実行したSQLのステートメントをキャッシュしておき、負荷が大きいDBの Prepare処理を、同じ処理に対しては省略してパフォーマンスを向上させる機能。 ステートメント・キャッシュは接続プールの各コネクションごとにキャッシュされます  推奨値:PreparedStatementの総数 Connection Connection Connection Statement3 Statement2 Statement1 Statement3 Statement2 Statement1 Statement3 Statement2 Statement1 DB 接続プール ステートメント・キャッシュ・サイズ Statementキャッシュが最大値を超えると、古いキャッシュから 廃棄されます。→ PreStmtキャッシュ廃棄 JDBC接続プールにおけるデータ分析 WebSphere Infrastructure Guide    「管理接続の数」の変動が多い場合、物理接続の作成と破棄が繰り返されて いる状態です。未使用タイムアウト値、または最小接続数の増加を検討します。 「障害」の値が増加し、接続タイムアウトによってエラーとなったリクエスト数が 多い場合、接続タイムアウト値の増加を検討します。 PreparedStatementキャッシュが廃棄されている場合、ステートメント・キャッ シュ・サイズが足りていないので廃棄されている分だけ増加させる必要があり ます。 JDBC接続プールにおけるチューニング・ポイント WebSphere Infrastructure Guide  プール内の接続の使用率が100%の状態が続き、同時待機数が多い場合は、 接続プール数の増加かスレッド数の制御を検討する必要があります。 プール内の接続使用率が100%の状態 「JCA接続プール」におけるモニター項目 WebSphere Infrastructure Guide データ名 作成された接続の数 レベル 低 作成された管理接続の合計数 破棄された接続の数 割り振られた接続の数 解放された接続の数 障害の数 管理接続の数 低 低 低 低 低 破棄された管理接続の合計数 管理接続がクライアントに割り振られた合計回数 管理接続がプールにリリースして返された合計回数 待機状態のスレッドが接続タイムアウトになる回数の合計 プール内の接続数(物理接続数) 接続ハンドルの数 平均使用時間(ミリ秒) 平均待ち時間(ミリ秒) プール・サイズ 空きプール・サイズ 同時待機 使用率 最大パーセント 低 中 中 高 高 高 高 高 与えられた接続ハンドルの数 接続が使用される平均時間(接続が割り振られる時刻からリリース時点までの時間) 接続がされるまでの平均待ち時間 プール内の管理接続の数とその平均 プール内の現在の空き管理接続の数とその平均 プール内に使用可能な接続がなく同時に接続待ちをするスレッドの数と平均数 プール内の接続の使用率の平均パーセント すべての接続が使用中である時間の平均パーセント 接続プールにおけるパラメーター WebSphere Infrastructure Guide       接続タイムアウト 最大接続数 最小接続数 リープ時間 未使用タイムアウト 経過タイムアウト セッション・プールにおけるパラメーター WebSphere Infrastructure Guide       接続タイムアウト 最大接続数 最小接続数 リープ時間 未使用タイムアウト 経過タイムアウト (参考)ConnectionとSession WebSphere Infrastructure Guide  Connection   JMSプロバイダーへの物理的な接続をカプセル化するオブジェクト 複数スレッドから共有することができるオブジェクトでSessionを作るためなどに使用される MessageやMessageConsumerの作成を行う 同時アクセスできないため、使用するスレッドで作成する ConnectionFactoryに対して1つのConnectionPoolが作成される Connectionに対して1つのSessionPoolが作成される Session  Session    ConnectionPool   SessionPool  JMS クライアント Connection Connection Connection Session Session Queue Session Session QueueManager ConnectionPool Session SessionPool 「HTTPセッション」におけるモニター項目 WebSphere Infrastructure Guide  作成されたセッションに関するデータ レベル 低 低 低 低 低 低 低 中 中 中 中 中 中 高 高 作成されたセッションの合計数 無効になったセッションの合計数 メモリー内で「オーバーフローの許可」がチェックされていない際に適用されます。 新規セッションの要求を処理できない合計回数。 分散セッションでキャッシュから破棄されたセッションの合計数 フェイル・オーバーなどで中断されたセッション・アフィニティの合計数 未使用のセッションがタイムアウトで無効になった合計数 タイムアウトが原因で存在していないセッションに対する要求の合計数。タイム アウト値が短いことを示す。 セッションの平均存続時間 分散セッションで外部からセッション・オブジェクトを読み取るのにかかった時間 分散セッションで、外部から読み取ったセッション・オブジェクトのサイズ 分散セッションで、外部にセッション・オブジェクトを書き込むのにかかった時間 分散セッションで、外部に書き込んだセッション・オブジェクトのサイズ セッションオブジェクトに対してのアクセス間隔の平均時間 同時にアクティブなセッションの数。WASがセッションの使用する要求を処理し ている場合、そのセッションはアクティブとなる。 メモリーにあるセッション数 メモリー内のセッション・オブジェクトのサイズ データ名 作成されたセッション 無効にされたセッション 新規セッションのスペースがありま せん キャッシュを破棄 類縁の中断 タイムアウトにより無効化 存在しないセッションを活動化 セッション存続時間(ミリ秒) 外部読み取り時間(ミリ秒) 外部読み取りサイズ 外部書き込み時間(ミリ秒) 外部書き込みサイズ 最後の活動化以降の時間(ミリ秒) アクティブ・セッション ライブ・セッション セッション・オブジェクト・サイズ(バイ 最大 ト) HTTPセッションにおけるパラメーター WebSphere Infrastructure Guide    メモリー内の最大セッション・カウント:メモリー内に保持できるセッションの数 オーバーフロー:最大セッション数を超えて、メモリー内にセッションを作成する ことを許可するかどうか セッションタイムアウト(分):未使用のセッションに対して、セッションを破棄する までの時間 分散セッションにおけるパラメーター WebSphere Infrastructure Guide  チューニング・レベルの設定で、分散セッションにおける書き込み頻度を設定し ます。 作成されたセッション/無効にされたセッション アクティブセッション WebSphere Infrastructure Guide WASがセッションを使用する要求を処理中 作成されたセッション getSession() Session active Session active Session active Session active Session active ヒープ領域 ヒープ領域 無効にされたセッション invalidate() Session active 作成されたセッション:ヒープ領域に 作成されたセッションの合計数 無効にされたセッション:ヒープ領域か ら無効にされたセッションの合計数 アクティブ・セッション:WASが処理 中のセッションの数 Session active Session active ヒープ領域 タイムアウトにより無効化 存在しないセッションを活動化 WebSphere Infrastructure Guide タイムアウトで無効化 Session non active セッションタイムアウト 経過後 Session active Session non active Session active Session active Session active ヒープ領域 ヒープ領域 タイムアウトが原因で存在してい ないセッションに対する要求 タイムアウトにより無効化:未使用のセション・オ ブジェクトがタイムアウトで無効になった合計数 存在しないセッションを活動化:タイムアウトによって 無効化されたセッションに対しての要求の合計数 新規セッションのスペースがありません WebSphere Infrastructure Guide  メモリー内で「オーバーフローの許可」がチェックされていない場合 無効なセッション・オブジェ クトが生成されます。 Session active Session active Session active Session active Session active Session invalid セッション・オブジェクト数が「メモリー内の最 大セッション・カウント」に達している状態 Session active Session active Session active Session active Session active getSession() setAttribute() getAttribute() ヒープ領域 IllegalStateException  「オーバーフローの許可」がチェックされている場合はセッションオブジェクトの 数に制限はありません。また、分散セッションでは「オーバーフローの許可」は 無効な操作となります。 新規セッションのスペースがありません:メモリー内セッション数が最大値に達し ているためセッションオブジェクトを作成できない合計回数 分散セッション ライブセッション/外部書き込みサイズ/外部書き込み時間 WebSphere Infrastructure Guide メモリーにあるセッション数 Session active Session active Session active 設定されたタイミングで DBへセッションオブジェ クトを書き込み Session active Session active Session active ヒープ領域 ヒープ領域 Session active DB ライブ・セッション:メモリー内 にあるセッション数 外部リソースに書き込まれ たセッション・オブジェクト DB 外部書き込み時間:外部リソースにセッション・オブジェク トを書き込むのに要した時間(ミリ秒) 外部書き込みサイズ:外部リソースに書き込んだ、セッ ション・オブジェクトのサイズ(バイト) 分散セッション キャッシュを破棄 WebSphere Infrastructure Guide メモリー内のセッション・オブジェク 数が最大に達している状態 古いセッションから 破棄されていきます Session active Session active Session active Session active Session active Session active DB getSession() DB Session active Session active Session active Session active Session active new Session ヒープ領域 ヒープ領域 Session active キャッシュを破棄:メモリー内で破棄されたセッション の数 HTTPセッションにおけるチューニング・ポイント WebSphere Infrastructure Guide    「新規セッションのスペースがありません」がカウントされている場合、無効な セッションが作成されています。メモリー内の最大セッションカウント値の増加を 検討する必要があります。 分散セッションで、「キャッシュを破棄」がカウントされている場合、セッションの スペースが足らずに、セッション・オブジェクトが破棄がされています。最大セッ ションカウント値の増加を検討する必要があります。 「存在しないセッションを活動化」がカウントされている場合、タイムアウトにより 無効化されたセッションへのアクセスが起こっています。セッションタイムアウト 値の増加を検討します。 その他の取得データ WebSphere Infrastructure Guide        Enterprise Bean トランザクション ワークロード管理 ORB Webアプリケーション システム 動的キャッシング EnterpriseBeanにおけるモニタリング WebSphere Infrastructure Guide   WASにおけるEJBパラメーター設定 StatelessSessionBean   ライフサイクル StatelessSessionBeanのしくみ ライフサイクル StatefulSessionBeanのしくみ  StatefulSessionBean    EntityBean   ライフサイクル CMPのしくみ ライフサイクル MessageDrivenBeanのしくみ StatelessSessionBean StatefulSessionBean EntityBean MessageDrivenBean  MessageDrivenBean    EnterpriseBeanにおけるモニター項目     EJBプールサイズの設定 WebSphere Infrastructure Guide     StatelessSessionBean,EntityBeanにおけるBeanインスタンスのプールサイ ズの最小値・最大値の設定が可能です。 最大プール・サイズを超えると、プール内のインスタンスは古いものから除去さ れていきます。 デフォルトは最小値50、最大値500です。 JVMの設定のカスタムプロパティで設定します。   名前:com.ibm.websphere.ejbcontainer.poolSize 値:対象のBean名とプールサイズを設定します。 beantypeA=min,max:beantypeB=min,max・・・・   beantypeは「##」で指定します。 minは最小値、maxは最大値を指定します。 EJBコンテナーにおけるパラメーター WebSphere Infrastructure Guide   非活性化ディレクトリー:非活性化されたBeanインスタンスの状態を保管するディレクト リーを設定します。 非活動プールクリーンアップ間隔(ミリ秒):コンテナーがBeanインスタンスのプール内の Beanインスタンスを削除する間隔を指定します。 EJBキャッシュ設定のパラメーター WebSphere Infrastructure Guide   キャッシュ・サイズ:EJBコンテナーがメモリー上にキャッシュするBeanインスタンスのバ ケット数 クリーンアップ間隔:キャッシュ・サイズをインスタンス数が超えた場合、EJBコンテナーが インスタンスのクリーンアップを試みる間隔 EJB caching optionの設定 WebSphere Infrastructure Guide   トランザクション間において、キャッシュされたBeanインスタンスをEJBコンテ ナーがどのようにコントロールするかを指定します。 EJB caching optionは以下の2つのプロパティーによって、決定されます。  活動化:どのタイミングでActivateを行うかを指定します。   ONCE:Beanが初回に呼び出された時のみにActivateが行われます。(Ready状態を維持) TRANSACTION:トランザクションの開始時にActivate、終了時にPassivateが行われます。 ACTIVATE:BeanがActivateされるときにejbLoad()が行われます。 TRANSACTION:トランザクションの開始時にejbLoad()が行われます。  ロード:どのタイミングでDBとの同期処理を行うかを指定します。    各Optionの組み合わせは以下のようになります。 Option A B C 活動化 ONCE ONCE TRANSACTION ロード ACTIVATION TRANSACTION TRANSACTION  プロパティーの設定はEJBデプロイメント・ディスクリプターで指定します。 StatelessSessionBeanのライフサイクル WebSphere Infrastructure Guide Does not exixt state ① newInstance() setSessionContext(SessionContext) ejbCreate() ③ ejbRemove() Method ② Bean Bean vacant Business method Bean vacant Bean vacant Bean vacant Instance pool of EJBBeans/ Ready state StatelessSessionBeanのしくみ WebSphere Infrastructure Guide    インスタンスの作成・破棄はEJBコンテナー主導で行います。 クライアントが同じメソッドを呼び出しても、同じインスタンスである保証 はありません。(過去の状態に関する情報は保持しない) インスタンスがコンテナーによってプールされ再利用されます。 クライアント 呼び出す EJB オブジェクト リモートインターフェース 呼び出す Bean Bean Bean プール Bean StatefulSessionBeanのライフサイクル WebSphere Infrastructure Guide Does not exixt state create(args) remove()または タイムアウト ① newInstance() setSessionContext(SessionContext) ejbCreate(args) ⑤ ejbRemove() ⑥ ③ ejbPassivate() タイムアウト ② Business method Bean Method Bean ejbActivate() Bean Disk Passive state ④ Method Bean Bean Instance Cache of EJBBeans/Ready state StatefulSessionBeanのしくみ WebSphere Infrastructure Guide     状態を保持し、Beanインスタンスの作成・削除はEJBクライアント主導で行います。 同一のEJBクライアントから要求があった場合、必ず同じBeanインスタンスが呼ばれま す。 EJBクライアントごとに新しいBeanインスタンスが作成されます。 Beanインスタンスが保持しているクライアントの状態をシリアライズして別の記憶領域に 格納して、リソースを解放し、リソースの節約をしています。 クライアント リモートインターフェース EJB オブジェクト Bean Bean Bean Bean シリアライズされて別 の記憶領域に保管 StatefulSessionBeanにおける非活性化 WebSphere Infrastructure Guide  非活性化の処理 キャッシュされている Beanインスタンス数が 最大値に達している状態 クライアント 1.メモリ内にないBeanのEJB オブジェクトのメソッドの呼び出 し 2.使われていない古 いBeanを非活性化 リモートインターフェース EJB オブジェクト 3.Beanの状態を シリアライズ Bean Bean Bean Bean 4.非活性化された Beanのシリアライズ された状態を格納 クライアントはメモリ内に存在しないBeanの EJBオブジェクトのメソッドを呼び出した。コンテ ナにキャッシュされたBeanの数はいっぱいに なっているため、コンテナは、このクライアント のリクエストを処理する前にBeanを1つ非活 性化する必要があります。 StatefulSessionBeanにおける活動化 WebSphere Infrastructure Guide  活動化の処理 クライアント 1.非活性化されているBeanのEJB オブジェクトのメソッド呼び出し リモートインターフェース EJB オブジェクト 2.非活性化され たBeanの状態 を取り出す 3.Beanを活動化する 4.ビジネスメソッド を呼び出す Bean Bean Bean Bean クライアントが非活性化された StatefulSessionBeanのEJBオ ブジェクトのメソッドを呼び出すと、 コンテナーによって活動化の処理 が行われます。 EntityBeanのライフサイクル ① Does not exixt state WebSphere Infrastructure Guide newInstance() setEntityContext(EntityContext) ⑪ unSetEntityContext() ② Bean ejbHome() Bean Bean ③ Bean Instance pool of EJBBeans ejbFind() ④ ⑥ ⑧ Business Method ejbCreate() ejbPostCreate() ejbActivate() ⑩ ejbRemove() ⑤ ejbPassivate() ⑨ Bean ejbStore() ejbLoad() DB Bean Bean ⑦ Instance Cache of EJBBeans/Ready State EntityBeanのしくみ ejbLoad()/ejbStore() WebSphere Infrastructure Guide  メモリ内のEntityBeanインスタンスとDBに格納されたEntityBeanのデータの同期は、 ejbLoad()とejbStore()メソッドによって行われます。   ejbLoad():DBからデータを読み出して、EntityBeanインスタンスのフィールドに設定します。 ejbStore():EntityBeanインスタンスの現在のフィールドのデータをDBに保存します。 EJBコンテナー 3.ビジネスメソッド EntityBean インスタンス 4. ejbStore() 1. ejbLoad() 2. DBから読み込み 5. DBへの書き出し EntityBeanデータ MessageDrivenBeanのライフサイクル WebSphere Infrastructure Guide Does not exixt state ① newInstance() setMessageDrivenContext() ejbCreate() ③ ejbRemove() ② Bean Bean vacant onMessage Bean vacant Bean vacant Bean vacant Instance pool of MessageDrivenBeans/ Ready state MDB(MessageDrivenBean)のしくみ WebSphere Infrastructure Guide    メッセージを非同期に処理することが可能 MDBがMessageConsumerの役割を果たす DestinationとMDBを関連づける必要がある メッセージ メッセージ クライアント JMSの 送信先 MDB MDB MDB MDB EJBコンテナー 「EnterpriseBean」におけるモニター項目 WebSphere Infrastructure Guide  StatelessSessionBean レベル 低 低 低 低 低 低 低 中 高 高 高 高 高 高 最大 最大 Beanがインスタンス化された回数の合計 Beanが解放された回数の合計 Beanインスタンスをプールから取り出す際の呼び出し回数の合計 プール内で使用可能なインスタンスを見つけたときの回数の合計 Beanインスタンスをプールに戻す際の呼び出し回数の合計 プールがいっぱいだったため、戻りオブジェクトが廃棄された回数の合計 プールのアイドル状態を検出し、消去しようとした回数の合計(非活動プールクリーンアッ プ間隔で間隔を設定) 各ドレーン(1回の消去)で廃棄されたインスタンスの平均数 作動可能状態のBeanインスタンスの数 存在するインスタンス数とその平均数(インスタンス化数-破棄数) Beanのリモートメソッドに対する呼び出しの回数の合計 Beanのリモートメソッドにおける平均応答時間(ミリ秒) 実行中のビジネス・メソッドの数とその平均値 インスタンス・プール内のBeanインスタンスの数とその平均数 Bean作成呼び出しにかかる平均時間 BeanRemove呼び出しにかかる平均時間 データ名 インスタンス化数 破棄数 プールからの取得 検出 プールへの戻り 廃棄される戻り プールからのドレーン 平均ドレーン・サイズ 作動可能Bean 同時ライブ メソッド呼び出しの合計 平均メソッドRT(ミリ秒) アクティブ・メソッド プール・サイズ 平均作成時間(ミリ秒) 平均除去時間(ミリ秒) インスタンス化数 WebSphere Infrastructure Guide Bean Instance in use Bean Instance vacant Bean Instance in use Bean Instance in use new Instance() setSessionContext() ejbCreate() Bean Instance vacant 使用可能なBeanインスタンスがない場合、 EJBコンテナーによって作成される : 使用中のBeanインスタンス : 使用されていないプール状態のBeanインスタンス インスタンス化数:Beanがインスタンス化された回数 破棄数/プールからのドレーン/平均ドレーンサイズ WebSphere Infrastructure Guide Bean Instance vacant Bean Instance in use 非活動プール クリーンアップ間隔 Bean Instance in use Bean Instance in use Bean Instance in use ejbRemove() Bean Instance vacant Bean Instance vacant Bean Instance vacant 使用していないインスタンスは EJBコンテナーによって破棄 破棄数:Beanインスタンスが破棄された合計回数 プールからのドレーン:インスタンスのプール状態を検出し、消去しようとした回数の合計 平均ドレーンサイズ:各ドレーンで廃棄されたインスタンスの平均数 プールからの取得/検出 WebSphere Infrastructure Guide Bean Instance vacant プールに使用可能なインスタ ンスがあるかどうか呼び出す 使用可能なインスタンスを 見つけた場合、再利用する Bean Instance in use Bean Instance in use Bean Instance in use Bean Instance in use Bean Instance in use Bean Instance vacant Bean Instance vacant プールからの取得:Beanインスタンスをプールから取り出す際の呼び出 し回数の合計 検出:プール内で使用可能なインスタンスを見つけたときの回数の合計 プールへの戻り WebSphere Infrastructure Guide Bean Instance in use Bean Instance in use Bean Instance in use Bean Instance in use Bean Instance in use Bean Instance vacant Bean Instance vacant Bean Instance vacant プールへの戻り:Beanインスタンスをプールに戻す際の呼び出し回数の 合計 廃棄される戻り WebSphere Infrastructure Guide 廃棄 Bean Instance in use Bean Instance in use Bean Instance in use Bean Instance in use Bean Instance in use Bean Instance vacant Bean Instance vacant Bean Instance vacant Bean Instance vacant 廃棄される戻り:プールがいっぱいだったため、戻りオブジェクトが廃棄さ れた回数の合計 同時ライブ/プール・サイズ WebSphere Infrastructure Guide Bean Instance in use Bean Instance in use Bean Instance in use 同時ライブ Bean Instance vacant Bean Instance vacant プール・サイズ 同時ライブ:存在しているインスタンス数(インスタンス化数-破棄数) プール・サイズ:使用していないインスタンス数 StatelessSessionBeanのチューニング・ポイント WebSphere Infrastructure Guide  Beanインスタンスの作成・削除にはコストがかかるため、プール・サイ ズ、非活動クリーンアップ間隔を適当な値に設定します。  「インスタンス化数」と「廃棄される戻り」が共にカウントされている場合は、最大値を 増やします。  最大値がクライアントからのアクセス数よりも小さいと、作成されたインスタンスはプールに 戻る際に破棄されるので、最大値はアクセス数と同じ値に設定します  「インスタンス化数」と「破棄数」-「廃棄される戻り」が共にカウントされている場合は、 最小値を増やすか非活動クリーンアップ間隔を長くします。 「EnterpriseBean」におけるモニター項目 WebSphere Infrastructure Guide  StatefulSessionBean レベル 低 低 低 低 低 低 中 中 Beanがインスタンス化された回数の合計 Beanが解放された回数の合計 Beanが初期化された回数の合計 Beanが削除された回数の合計 Beanオブジェクトが活動化された合計回数 Beanオブジェクトが非活性化された合計回数 Beanオブジェクトの活動化にかかる平均時間 Beanオブジェクトの非活性化にかかる平均時間 データ名 インスタンス化数 破棄数 作成数 除去数 活動化数 非活性化数 活動化時間(ミリ秒) 非活性化時間(ミリ秒) 作動可能Bean 同時ライブ メソッド呼び出しの合計 平均メソッドRT(ミリ秒) アクティブ・メソッド 平均作成時間(ミリ秒) 平均除去時間(ミリ秒) 高 高 高 高 高 最大 最大 作動可能状態(MethodReady)のBeanインスタンスの数 存在するインスタンス数とその平均数(インスタンス化数-破棄数) Beanのリモートメソッドに対する呼び出しの合計回数 Beanのリモートメソッドにおける平均応答時間 実行中のビジネス・メソッドの数とその平均値 Bean作成呼び出しにかかる平均時間 beanRemove呼び出しにかかる平均時間 インスタンス化数/作成数 WebSphere Infrastructure Guide EJBクライアントがcreate(args) メソッドを呼び出す クライアントと対応づけら れたインスタンスが生成 Bean Instance ready Bean Instance ready Bean Instance ready new Instance() setSessionContext() ejbCreate(args) インスタンス化数:Beanがインスタンス化された回数 作成数:インスタンスが初期化された回数 破棄数/除去数 WebSphere Infrastructure Guide EJBクライアントremove()メソッ ドを呼び出す コンテナーによってイン スタンスは破棄される Bean Instance ready Bean Instance ready Bean Instance ready Bean Instance ready ejbRemove() 破棄数:Beanが解放された合計回数 除去数:Beanインスタンスが除去された合計回数 活動化数 WebSphere Infrastructure Guide ①EJBクライアントがPassive状態 のBeanオブジェクトを呼び出す Passive状態のBeanオ ブジェクトが復元される Bean Instance ready Bean Instance ready Bean Instance ready ③ejbActivate() Disk ②Passive状態のBean オブジェクトの情報を取り 出す 活動化数:Beanオブジェクトが活動化された合計回数 非活性化数 WebSphere Infrastructure Guide ①EJBコンテナーがBeanインス タンスのejbPassivate()メソッド を呼び出す Bean Instance ready Bean Instance ready Bean Instance ready Bean Instance ready ejbPassivate() Disk ②非活性化されたインスタ ンスの情報を保管する 非活性化数:Beanオブジェクトが非活性化された合計回数 作動可能Bean/同時ライブ WebSphere Infrastructure Guide Bean Instance ready Bean Instance ready Bean Instance ready 同時ライブ:存在しているインスタンス数(インスタンス化数-破棄数) 作動可能Bean:MethodReady状態のインスタンス数 StatefulSessionBeanのチューニング・ポイント WebSphere Infrastructure Guide  Activate、Passivateにはシリアライズ化の処理が含まれるので、パ フォーマンスの低下を招きます。キャッシュ・サイズを適当な値に設定 します。  「活動化数」と「非活動化数」が共にカウントされている場合は、キャッシュ・サイズを 増やします。  StatefulSessionBeanのキャッシュ・サイズがクライアントの同時アクセス数よりも尐ない場 合、ActivateとPassivateが頻繁に発生するので、キャッシュ・サイズを増やします。  Beanインスタンスはクライアントからremove()メソッドが呼び出される 場合と、タイムアウトを迎えた場合に削除されます。タイムアウトを適当 な値に設定します。  クライアントは処理が終了したらremove()メソッドを呼び出す必要があり、タイムアウ トに頼ってはいけません。 「EnterpriseBean」におけるモニター項目 WebSphere Infrastructure Guide  EntityBean(1) レベル 低 低 低 低 低 低 低 低 低 低 Beanオブジェクトが作成された合計回数(ejbCreate()メソッドが呼び出された合計回数) Beanオブジェクトが削除された合計回数(ejbRemove()メソッドが呼び出された合計回数) Beanがインスタンス化された回数の合計 Beanが解放された回数の合計 Beanオブジェクトが活動化された合計回数 Beanオブジェクトが非活性化された合計回数 Beanデータが永続ストレージからロードされた合計回数 Beanデータが永続ストレージに保管された合計回数 Beanインスタンスをプールから取り出す際の呼び出し回数の合計 プール内で使用可能なインスタンスを見つけたときの回数の合計 データ名 作成数 削除数 インスタンス化数 破棄数 活動化数 非活性化数 ロード数 保管数 プールからの取得 検出 プールへの戻り 廃棄される戻り 低 低 Beanインスタンスをプールに戻す際の呼び出し回数の合計 プールがいっぱいだったため、戻りオブジェクトが廃棄された回数 プールからのドレーン 低 プールのアイドル状態を検出し、消去しようとした回数の合計(非活動プールクリーンアップ 間隔で間隔を設定) 「EnterpriseBean」におけるモニター項目 WebSphere Infrastructure Guide  EntityBean(2) レベル 中 中 中 中 永続ストレージからBeanデータをロードするのにかかる平均時間 Beanデータを永続ストレージに保管するのにかかる平均時間 Beanインスタンスの活動化にかかる平均時間(DBでの時間も含む) Beanインスタンスの非活性化にかかる平均時間 データ名 ロード時間(ミリ秒) 保管時間(ミリ秒) 活動化時間(ミリ秒) 非活性化時間(ミリ秒) 平均ドレーン・サイズ プール・サイズ 作動可能Bean 同時ライブ メソッド呼び出しの合計 平均メソッドRT(ミリ秒) アクティブ・メソッド 平均作成時間(ミリ秒) 平均除去時間(ミリ秒) 中 高 高 高 高 高 高 最大 最大 各ドレーン(1回の排出)で廃棄されたインスタンスの平均数 プール内のインスタンス数 Ready状態のBeanインスタンスの数 存在するインスタンス数(インスタンス化数-破棄数) Beanのリモートメソッドに対する呼び出しの回数 Beanのリモートメソッドにおける平均応答時間(ホーム、リモート、ローカル) 同時にアクティブになるメソッドの平均数(同時に呼び出されるメソッドの数) Bean作成呼び出しにかかる平均時間。(ロード時間があればそれも含む) beanRemove呼び出しにかかる平均時間。(DBでの時間があればそれも含む) インスタンス化数/破棄数 WebSphere Infrastructure Guide Bean Instance pooled Bean Instance ready Bean Instance ready newInstance() setEntityContext() Bean Instance pooled Bean Instance ready Bean Instance ready Bean Instance pooled unsetEntityContext() finalize() Bean Instance pooled Bean Instance pooled 作成数/除去数 特定のレコードと関連付けられます WebSphere Infrastructure Guide Bean Instance ready Bean Instance ready Bean Instance ready Bean Instance pooled Bean Instance pooled ejbCreate() Bean Instance pooled Bean Instance ready Bean Instance ready Bean Instance ready Bean Instance pooled ejbRemove() Bean Instance pooled Bean Instance pooled 活動化数/ロード数 WebSphere Infrastructure Guide DB ②Beanのデータをロードします Bean Instance ready Bean Instance ready Bean Instance ready ejbActivate() ejbLoad() Bean Instance pooled Bean Instance pooled Bean Instance pooled ①プールされているインスタンスが活動化 され、特定のレコードと関連付けられます 活動化数:Beanが活動化された合計回数 ロード数:Beanデータがロードされた合計回数 非活性化数/保管数 WebSphere Infrastructure Guide DB ①Beanのデータを保管します Bean Instance ready Bean Instance ready Bean Instance ready ejbStore() Bean Instance pooled ejbPassivate() Bean Instance pooled Bean Instance pooled ②インスタンスとレコードとの関連付 けを除去します 非活性化数:Beanが非活性化された合計回数 保管数:Beanデータが保管された合計回数 作動可能Bean/同時ライブ/プール・サイズ WebSphere Infrastructure Guide Bean Instance ready Bean Instance ready 作動可能Bean Bean Instance ready Bean Instance pooled Bean Instance pooled プール・サイズ 作動可能Bean:Ready状態のインスタンス数 同時ライブ:存在しているインスタンス数(インスタンス化数-破棄数) プール・サイズ:プール状態のインスタンス数 EntityBeanのチューニング・ポイント(1) WebSphere Infrastructure Guide  Beanインスタンスの作成・削除にはパフォーマンス・コストがかかるた め、プール・サイズを適当な値に設定します。   「インスタンス化数」と「廃棄される戻り」が共にカウントされている場合は、最大値を 増やします。 「インスタンス化数」と「破棄数」-「廃棄される戻り」が共にカウントされている場合は、 最小値を増やすか非活動クリーンアップ間隔を長くします。  Activate、PassivateにはDBとの同期処理が伴うこともありパフォーマ ンス・コストがかかるため、キャッシュ・サイズを適当な値に設定します。  「活動化数」と「非活動化数」が共にカウントされている場合は、キャッシュ・サイズを 増やします。  EntityBeanのキャッシュ・サイズがクライアントの同時アクセス数よりも尐ない場合、 ActivateとPassivateが頻繁に発生するので、キャッシュ・サイズを増やします。 EntityBeanのチューニング・ポイント(2) WebSphere Infrastructure Guide  EJB caching optionをアプリケーションに合わせて設定します。  Option A     コンテナーは異なるトランザクション間を超えてインスタンスをキャッシュします。 1つのDBレコードに対応するインスタンスは1つだけになります。 最もパフォーマ ンスに優れる DBへ排他的にアクセスします。したがってWLM環境は使用できません。 初回アクセス時のみデータはLoadされ、次のトランザクション開始時にLoadは行われません。 コンテナーは異なるトランザクション間を超えてインスタンスをキャッシュします。 1つのDBレコードに対応するインスタンスは複数存在できます。 DBへのアクセスは排他的ではなく、WLM環境に対応しています。 次のトランザクション開始時にもデータのLoadが行われます。  Option B      Optino C(default)  コンテナーは異なるトランザクション間を超えてインスタンスをキャッシュせず、トランザクショ ン終了時にインスタンスはプールに戻されます。 多くのクライアントからの  1つのDBレコードに対応するインスタンスは複数存在できます。 同時アクセスに有効  DBへのアクセスは排他的ではなく、WLM環境に対応しています。  次のトランザクション開始時にもデータのLoadが行われます。 *どの組み合わせでもトランザクション終了時にデータのStoreは行われます。 「EnterpriseBean」におけるモニター項目 WebSphere Infrastructure Guide  MessageDrivenBean(1) レベル 低 低 低 低 低 低 低 低 Beanがインスタンス化された回数の合計 Beanが解放された回数の合計 Beanインスタンスをプールから取り出す際の呼び出し回数の合計 プール内で使用可能なインスタンスを見つけたときの回数の合計 Beanインスタンスをプールに戻す際の呼び出し回数の合計 プールがいっぱいだったため、戻りオブジェクトが廃棄された回数 プールのアイドル状態を検出し、消去しようとした回数の合計(非活動プールクリー ンアップ間隔で間隔を設定) BeanのonMessageメソッドに送達されるメッセージの合計数 BeanのonMessageメソッドへの送達に失敗した、バックアウト・メッセージの合計数 各ドレーン(1回の排出)で廃棄されたインスタンスの平均数 SessionプールからのServerSessionの取得にかかる平均時間 データ名 インスタンス化数 破棄数 プールからの取得 検出 プールへの戻り 廃棄される戻り プールからのドレーン メッセージ・カウント メッセージ・バックアウト・カウント 低 平均ドレーン・サイズ 待機時間(ミリ秒) 中 中 「EnterpriseBean」におけるモニター項目 WebSphere Infrastructure Guide  MessageDrivenBean(2) レベル 高 高 高 ServerSessionプールの使用中パーセント プール内のインスタンス数 Ready状態のBeanインスタンスの数 データ名 セッション使用 プール・サイズ 作動可能Bean 同時ライブ メソッド呼び出しの合計 平均メソッドRT(ミリ秒) アクティブ・メソッド 平均作成時間(ミリ秒) 平均除去時間(ミリ秒) 高 高 高 高 最大 最大 存在するインスタンス数(インスタンス化数-破棄数) Beanのリモートメソッドに対する呼び出しの回数 Beanのリモートメソッドにおける平均応答時間(ホーム、リモート、ローカル) 同時にアクティブになるメソッドの平均数(同時に呼び出されるメソッドの数) Bean作成呼び出しにかかる平均時間。(ロード時間があればそれも含む) beanRemove呼び出しにかかる平均時間。(DBでの時間があればそれも含む) 「トランザクションマネージャー」におけるモニター項目 データ名 開始するグローバル・トランザクション 処理するグローバル・トランザクション 開始するローカル・トランザクション アクティブなグローバル・トランザクション アクティブなローカル・トランザクション 最適化数 コミットするグローバル・トランザクション レベル 低 低 低 低 低 低 低 サーバー上で開始されたグローバル・トランザクションの合計数 呼び出し元のグローバル・トランザクションに組み込まれて処理 されたトランザクションの合計数 サーバー上で開始されたローカル・トランザクションの合計数 実行中のグローバル・トランザクションの合計数 実行中のローカル・トランザクションの合計数 最適化のために1フェーズコミットに変換されたグローバルトラ ンザクションの合計数 コミットしたグローバル・トランザクションの合計数 WebSphere Infrastructure Guide コミットするローカル・トランザクション ロールバックするグローバル・トランザクション ロールバックするローカル・トランザクション グローバル・トランザクション・タイムアウト ローカル・トランザクション・タイムアウト ローカル・トランザクションの所要時間(ミリ秒) 完了までのグローバルの所要時間(ミリ秒) 完了までのローカルの所要時間(ミリ秒) グローバル作成の所要時間(ミリ秒) グローバル・コミットの所要時間(ミリ秒) ローカル・コミットの所要時間(ミリ秒) 低 低 低 低 低 中 中 中 中 中 中 コミットしたローカル・トランザクションの合計数 ロールバックされたグローバル・トランザクションの合計数 ロールバックされたローカル・トランザクションの合計数 タイムアウトになったグローバル・トランザクションの合計数 タイムアウトになったローカル・トランザクションの合計数 グローバル・トランザクションの平均所要時間 ローカル・トランザクションの平均所要時間 グローバル・トランザクション完了前の平均所要時間 ローカル・トランザクション完了前の平均所要時間 グローバル・トランザクション作成の平均所要時間 グローバル・トランザクションのコミットの平均所要時間 ローカル・トランザクションのコミットの平均所要時間 グローバル・トランザクションの所要時間(ミリ秒) 中 トランザクション・サービスのパラメーター WebSphere Infrastructure Guide   合計トランザクション存続時間タイムアウト:アプリケーション・サーバー上で1トランザク ション存続可能な最大時間(秒)。タイムアウトを迎えるとトランザクションはロールバック されます。 クライアント非活動タイムアウト:クライアントがリモートアクセスをするトランザクションで 非活動状態でいられる時間。タイムアウトを迎えるとトランザクションはロールバックされ ます。 (参考)グローバル・トランザクション WebSphere Infrastructure Guide  WASのトランザクションマネージャーが管理するトランザクションです。  CMT:コンテナーによって管理されます。  EnterpriseBeanのDDで適切なトランザクション属性を与えます。  BMT:ユーザーのコーディングによってトランザクションを開始、終了する制 御方法です。   java.transaction.UserTransactionインターフェースを利用します。 EntityBeanはサポートしません。 EJBClient TX.begin() EJB DB TX.commit() グローバル・トランザクション (参考)ローカル・トランザクション WebSphere Infrastructure Guide  コンテナーは”Unspecified”トランザクション・コンテキストと共にリモート・メソッ ドを呼び出します。  EJBクライアントのトランザクション内から呼び出された場合、リモートメソッドの処理中、EJBクラ イアントのトランザクションは中断され、リモートメソッドの終了後、中断されたEJBクライアントの トランザクションは再開されます。   “Unspecified”トランザクション・コンテキストとは、EJB仕様で規定されているグ ローバル・トランザクション以外のトランザクション・コンテキストです。 ローカルトランザクションのコントロールをContainer、またはApplicationが行う ように指定することができます。  EntityBeanはContainerのみ  ローカルトランザクションの単位はBeanMethodごとになります EJBClient TX1.begin() 中断 EJB TX2.begin() DB 再開 TX1.commit() グローバル・トランザクション TX2.commit() ローカル・トランザクション (参考)ローカル・トランザクション設定 WebSphere Infrastructure Guide  ローカルトランザクションの動作はデプロイメント・ディスクリプターで 拡張機能として設定可能です。  境界  BeanMethod:ローカルトランザクションの単位はBeanMethodになります。  リゾルバー  ContainerAtBoundary:トランザクションはコンテナーがコントロールします  Appplication:トランザクションはユーザーコーディングによって開始・終了されます。 (EntityBeanはサポート外)  未解決のアクション  Commit:未完了のトランザクションはCommitされます  RollBack:未完了のトランザクションはRollBackされます (参考)トランザクション属性によるトランザクション・スコープ例 トランザクション・スコープ WebSphere Infrastructure Guide ① EJB client TX.begin(); TX.commit(); EJB client EJB EJB TX属性:Required、 RequiresNew TX属性:Required、 Supports,Mandatory EJB トランザクション・スコープ EJB EJB TX属性:NotSupported TX属性:Required、 Supports,Mandatory TX属性:Required、 Supports,Mandatory EJB ② EJB TX属性:Required、 Supports,Mandatory EJB TX属性:NotSupported トランザクション・スコープ トランザクション・スコープ EJB ③ EJB client TX.begin(); TX.commit(); TX属性:RequiresNew TX属性:NotSupported (参考)JTA(Java Transaction API) WebSphere Infrastructure Guide    2フェーズ・コミット・プロトコルをJavaの世界に適用した規格です。 XAResourceインターフェースの中で2フェーズ・コミット処理に使用する以下 のメソッドが定められています。 2フェーズ・コミット処理はミドルウェア・レベル(ResourceManagerと TransactionManager間)でのやりとりになります。 public void commit (Xid xid, boolean onePhase); public void end (Xid xid, int flags); public void forget (Xid xid); public int getTransactionTimeout (); public boolean isSameRM (XAResource xares); public int prepare (Xid xid); public Xid [] recover (int flags); public void rollback (Xid xid); public boolean setTransactionTimeout (int second); public void start (Xid xid, int flags); < XAResourceインターフェース> ミドルウェアが使用するもので、これ らのメソッドを使用してユーザーが コーディングする必要はありません。 2フェーズ・コミット WebSphere Infrastructure Guide   複数のデータ資源間の更新処理の整合性を保つための仕組み 以下の2段階の処理に分けて実施   prepareフェーズ commitフェーズ Transaction Manager xa_start 更新処理 更新処理 xa_end xa_end xa_start TX.begin() DB① DB② TX.commit() アプリケーション Resource Manager1 Resource Manager2 トランザクション開始 完了までのグローバルの所要時間 コミット prepareフェーズ xa_prepare xa_prepare xa_commit グローバル作成の所要時間 commitフェーズ xa_commit グローバル・コミットの所要時間 最適化数 WebSphere Infrastructure Guide AppServer TX.begin() RMへの参照処理 DB① XA対応ドライバー TX.commit() AppServer DB② XA対応ドライバー 1フェーズ・コミットに最適化 (prepareフェーズを経ずに commitフェーズを実行) 単一RMへの処理 TX.begin() DB TX.commit() XA対応ドライバー 最適化数:グローバル・トランザクション内で2フェーズ・コミットの必要がない 場合に、1フェーズコミットに変換されたトランザクションの合計数 「ワークロード管理」におけるモニター項目 WebSphere Infrastructure Guide  クライアント レベル 低 低 中 クライアントからアプリケーションサーバーに送信されるIIOP要求の合計数 クライアントが、初期または更新されたクラスター情報を受け取った合計回数 クライアントがIIOP要求を送信してから応答を受け取るまでの応答時間(ミリ秒) データ名 発信IIOP要求数 サーバー・クラスター更新数 クライアント応答時間  サーバー レベル 低 低 低 低 低 低 中 高 サーバーが受け取ったIIOP要求の数の合計 サーバーが受け取ったTransactionAffinityによるIIOP要求の合計数 サーバーが受け取ったAffinityによるものでないIIOP要求の合計数 サーバーが受け取ったWLMを行っていないIIOP要求の合計数 サーバーが、初期または更新されたクラスター情報を受け取った合計回数 サーバーに対してWLM可能なクライアント数の合計 サーバーがIIOP要求を受け取ってから戻すまでの応答時間(ミリ秒) サーバー内で現在処理中のIIOP要求の数 データ名 IIOP要求数 強類縁IIOP要求数 類縁なしのIIOP要求数 非WLM使用可能IIOP要求数 サーバー・クラスター更新数 サービスされたWLMクライアント数 サーバー応答時間 同時要求数 発信IIOP要求数/IIOP要求数 サーバー・クラスター更新数 WebSphere Infrastructure Guide EJB Container1 Web Container Application Server Application Server WLM plug-in RMI-IIOP EJB Container2 Application Server Cluster クライアント サーバー 発信IIOP要求数:クライアントからアプリケーションサーバーに送信されるIIOP要求の合計数 IIOP要求数:サーバーが受け取ったIIOP要求数の合計 サーバー・クラスター更新数:初期または更新されたクラスター情報を受け取った合計回数 強類縁IIOP要求数 WebSphere Infrastructure Guide  TransactionAffinity  トランザクション処理中は同じEJBコンテナーで処理されます EJB Container1 Web Container Application Server Application Server WLM plug-in RMI-IIOP × EJB Container2 Application Server クライアント サーバー Cluster 強類縁IIOP要求数:クライアントからアプリケー ションサーバーに送信されるIIOP要求の合計数 「ORB」におけるモニター項目 WebSphere Infrastructure Guide  ORB データ名 要求合計 ルックアップ時間 同時要求 レベル 低 中 高 ORBに送信される要求の合計数 オブジェクト参照の検索にかかった時間(ミリ秒) ORBによって並行して処理される要求数  インターセプター データ名 処理時間 レベル 中 インターセプターの実行にかかる時間(ミリ秒) *インターセプターは、クライアントからのリクエストを横取り(intercept)し、分散オブジェク トが必要としているミドルウェア機能を実行し(トランザクション、セキュリティ、永続化 など)、その後、呼び出しを分散オブジェクトに委譲します。 「Webアプリケーション」におけるモニター項目 WebSphere Infrastructure Guide データ名 ロードするサーブレット数 再ロード数 要求合計 エラー数 平均応答時間(ミリ秒) 同時要求 レベル 低 低 低 低 中 高 ロードされたサーブレットの合計数 再ロードされたサーブレットの合計数 サーブレットの処理要求の合計数 サーブレット/JSPにおけるエラー合計数 サーブレット要求が完了した平均応答時間(ミリ秒) 同時に処理される要求の数 「システム」におけるモニター項目 WebSphere Infrastructure Guide データ名 CPU使用率 空きメモリー 平均CPU使用率 レベル 低 低 中 最後の照会以降の平均CPU使用率 空きメモリーのスナップショット(KB単位) データ使用可能以降の平均CPU使用率 「動的キャッシング」のモニター項目(1) WebSphere Infrastructure Guide データ名 最大メモリーキャッシュサイズ メモリー内キャッシュ・サイズ タイムアウト数 メモリー内のヒット数 ディスク上のヒット数 レベル 低 低 低 低 低 メモリー内のキャッシュ・エントリーの最大数 メモリー内のキャッシュ・エントリーの現在の数 テンプレート・タイムアウトとディスク・タイムアウトの集合 メモリーから提供されるこのキャッシュ可能オブジェクトの要求 ディスクから提供されるこのキャッシュ可能オブジェクトの要求 明示的無効化 LRU無効化 低 低 このテンプレートに対して発行された明示的無効化の合計 LRU アルゴリズムにより、メモリーから除去されたキャッシュ・エントリー。これらのエ ントリーは、ディスク・オーバーフローが使用可能になっている場合、ディスクに対して 非活性化されます。 タイムアウトのため、メモリーおよび/またはディスクから除去されたキャッシュ・エント リー このテンプレートから作成されたキャッシュ・エントリーの現在の数。 totalCacheSize と同等の per-template を参照してください。 クラスター内のほかの Java 仮想マシン (JVM) から提供されるこのキャッシュ可能オ ブジェクトの要求 タイムアウト数 エントリー リモートヒット数 低 低 低 「動的キャッシング」のモニター項目(2) WebSphere Infrastructure Guide データ名 ミス クライアント要求 分散要求数 明示的無効化数(メモリー) 明示的無効化数(ディスク) テンプレート ローカルの明示的無効化数 リモートの明示的無効化数 リモート作成数 レベル 低 低 低 低 低 低 低 低 低 キャッシュで検出されなかったこのキャッシュ可能オブジェクトの要求 アプリケーション・サーバーで実行されているアプリケーションによって生成されたこ のキャッシュ可能オブジェクトの要求 このクラスター内の連携キャッシュによって生成されたこのキャッシュ可能オブジェク トの要求 メモリーからエントリーが除去される結果となる明示的無効化 ディスクからエントリーが除去される結果となる明示的無効化 対応するエントリーが存在しないこのテンプレートに対して受信された明示的無効化 プログラマチックに、またはキャッシュ・ポリシーにより、ローカルに生成された明示 的無効化 このクラスター内の連携JVMから受信した明示的無効化 連携動的キャッシュから受信したエントリー WebSphere Infrastructure Guide パフォーマンス・サーブレット パフォーマンス・サーブレット とは WebSphere Infrastructure Guide    パフォーマンス・データをXML形式で出力するサーブレット(HTTP経由) WASディレクトリーにあるPerfServletApp.ear をインストールするだけで実行 可能 取得できるパフォーマンス・データ内容はTivoli Performance Viewer と同じ EARファイルを提供 インストールと実行 WebSphere Infrastructure Guide  インストール   PerfServletApp.ear をアプリケーション・サーバーにインストール インストールするのはセル内で1つのアプリケーション・サーバーのみ ブラウザで下記URLにアクセス http://<ホスト名>/wasPerfTool/servlet/perfservlet?Node=①&Server=②&Module=③ ①:ノード名 ②:アプリケーション・サーバー名 ③:モジュール名 ブラウザにXML形式の結果を表示 アプリケーション・サーバー1の パフォーマンス・サーブレットにアクセス  実行   クライアント アプリケーション・サーバー1 パフォーマンス サーブレット アプリケーション・サーバー1や2や3の パフォーマンス・データを取得 アプリケーション・サーバー2 デプロイメント・マネージャー アプリケーション・サーバー3 セル 出力結果 WebSphere Infrastructure Guide (以下、略) - - - - - + - - - - - (以下、略) Tivoli Performance Viewer のモニターデータ WebSphere Infrastructure Guide PMIクライアント・アプリケーション PMIクライアントアプリケーションとは WebSphere Infrastructure Guide     独自で作成 / カスタマイズ可能なパフォーマンス・モニター・アプリケーション PMI のAPIを使用してプログラミング Javaアプリケーションとしてもサーブレットとしてもサポート 同一ノード上でも別ノード上でも稼動可能 PMI クライアントアプリケーション実行 PMI クライアント アプリケーション アプリケーション・サーバー(WAS) PMI サービス PMI サーブレットアクセス パフォーマンス・データ 取得 PMI サーブレット パフォーマンス・データ取得までの流れ WebSphere Infrastructure Guide アプリケーション・サーバー (WAS) PMI クライアントアプリケーション ① ③ PMI Client MBean UserManager PMI サービス ② ④ Stats メソッドの呼び出し回数 メソッドの平均応答時間 メソッドの同時呼び出し Statistic ⑥ メソッド create ⑤ ⑦ メソッドの呼び出し回数 メソッドの平均応答時間 メソッドの同時呼び出し CountStatistic Boundary Statistic RangeStatistic TimeStatistic BoundedRange Statistic ⑧ パフォーマンス データ PMIクライアントアプリケーション(サンプル) WebSphere Infrastructure Guide PmiClientSample (1/7) package co.jp.ise.pmi.sample; import com.ibm.websphere.pmi.*; import com.ibm.websphere.pmi.stat.*; import com.ibm.websphere.pmi.client.*; import com.ibm.ejs.ras.ShowLog; admin.jar import com.ibm.websphere.management.*; import com.ibm.websphere.management.exception.*; import javax.management.*; jmxc.jar import org.apache.soap.util.xml.PrefixedName; import test.pmi.dataobject.BaseDataObject; import test.pmi.dataobject.EJBStatsDataObj; import java.util.*; import java.io.*; /** * PmiClientSample */ PMI クライアントAPI を 使用するのに必須 Class にはPmiConstants を実装 public class PmiClientSample implements PmiConstants { static String nodeName = "localhost"; サーバーへ接続するための設定 static String serverName = "server1"; (初期設定) static String portNumber = "8880"; static String connectionType = "SOAP"; static PmiClient pmiClinet = null; static BaseDataObject oldData = null; Stats の差分計算用データ static BaseDataObject newData = null; static StatsDataCalc statsDataCalc = new StatsDataCalc(); PMIクライアントアプリケーション (サンプル) WebSphere Infrastructure Guide PmiClientSample (2/7) public static void main(String[] args) { System.out.println("\n--- PmiClientSample (MBean Version)---\n"); if (args[0] != null) nodeName = args[0]; if (args[1] != null) serverName = args[1]; 4つの引数をパラメーターに設定 if (args[2] != null) portNumber = args[2]; (引数がなければ初期設定を使用) if (args[3] != null) connectionType = args[3]; System.out.println("\n--- Get PMIClient ---\n"); PMIClient を取得 getPmiClient(nodeName, portNumber, connectionType); System.out.println("\n--- Set Monitor Level ---\n"); setMoniterLevel() で setMoniterLevel(getObjectNameByType(pmiClient, "Server")); モニターレベルを設定 System.out.println("\n--- Get EJB's MBeans(1) ---\n"); oldData = new BaseDataObject(); oldData.setEjbStatsArray(setStatsForEJBModuleStats(getObjectNameListByType(pmiClient, "StatelessSessionBean"))); try { System.out.println("\n--- Thread Sllep 10000ms ---\n"); type=StatelessSessionBean のデータ Thread.sleep(10000); 1回目取得 } catch (InterruptedException e) { 10000ミリ秒のsleep e.printStackTrace(); } type=StatelessSessionBean のデータ System.out.println("\n--- Get EJB's MBeans(2) ---\n"); 2回目取得 newData = new BaseDataObject(); newData.setEjbStatsArray(setStatsForEJBModuleStats(getObjectNameListByType(pmiClient, "StatelessSessionBean"))); System.out.println(oldData + "\n\n"); System.out.println(newData + "\n\n"); statsDataCalc.deltaStaticticsData(oldData, newData); 取得した2つのデータの差分を計算して表示 } getPmiClient() で PMIクライアントアプリケーション (サンプル) WebSphere Infrastructure Guide PmiClientSample (3/7) private static void getPmiClient(String NodeName, String PortNumber, String ConnectionType) { try { System.out.println("Get PmiClient."); System.out.println("\tConnect to WebSphere NodeName:" + NodeName + " PortNumber:" + PortNumber + " ConnectionType:" + connectionType); pmiClinet = new PmiClient(NodeName, PortNumber, "WAS50", false, ConnectionType); System.out.println("\tConnect! NodeName:" + NodeName + " PortNumber:" + PortNumber + " ConnectionType:" + connectionType); } catch (Exception e) { System.out.println("\tCan't get PMIClient (-getPmiClient-)"); } } new してPMIClient を取得 PMIクライアントアプリケーション (サンプル) WebSphere Infrastructure Guide PmiClientSample (4/7) private static ArrayList getObjectNameListByType(PmiClient pmiClient, String typeName) { System.out.println("Getting a " + typeName + " ObjectName from " + nodeName + ":" + serverName); ObjectName[] onames = pmiClient.listMBeans(nodeName, serverName); 全てのMBean を配列onames[] に格納 ArrayList resultArray = new ArrayList(); if (onames != null) { System.out.println("\tNumber of MBeans retrieved= " + onames.length); ObjectName on; for (int i = 0; i < onames.length; i++) { on = onames[i]; String type = on.getKeyProperty("type"); if (type != null && type.equals(typeName)) { resultArray.add(on); } } 引数として指定されたtype=StatelessSessionBean } のMBean(Stats) だけをresultArray に格納 System.out.println("\tFind " + typeName + " Amount:" + resultArray.size()); return resultArray; } resultArray を戻す PMIクライアントアプリケーション (サンプル) WebSphere Infrastructure Guide PmiClientSample (5/7) private static ObjectName getObjectNameByType(PmiClient pmiClient, String typeName) { System.out.println("Getting a " + typeName + " ObjectName from " + nodeName + ":" + serverName); ObjectName[] onames = pmiClinet.listMBeans(nodeName, serverName); 全てのMBean を配列onames[] に格納 ObjectName resultOName = null; if (onames != null) { ObjectName on; for (int i = 0; i < onames.length; i++) { on = onames[i]; String type = on.getKeyProperty("type"); if (type != null && type.equals(typeName)) { resultOName = on; } } resultOName に格納 } System.out.println("\tReturn OName= " + resultOName); return resultOName; } resultOName を戻す PMIクライアントアプリケーション (サンプル) WebSphere Infrastructure Guide PmiClientSample (6/7) private static void setMoniterLevel(ObjectName mbean) { System.out.println("\n testSetLevel MAX\n"); try { 引数として指定されたMbean(resultOName) のモニターレベルを最大に設定 MBeanLevelSpec spec = new MBeanLevelSpec(mbean, null, PmiConstants.LEVEL_MAX); pmiClient.setStatLevel(nodeName, serverName, spec, true); System.out.println("after setInstrumentaionLevel MAX on server MBean\n"); MBeanLevelSpec[] mlss = pmiClient.getStatLevel(nodeName, serverName, mbean, true); if (mlss == null) System.out.println("error: null from getInstrumentationLevel"); else { for (int i = 0; i < mlss.length; i++) if (mlss[i] != null) { int mylevel = mlss[i].getLevel(); ObjectName myMBean = mlss[i].getObjectName(); StatDescriptor mysd = mlss[i].getStatDescriptor(); } } } catch (Exception ex) { new AdminException(ex).printStackTrace(); ex.printStackTrace(); System.out.println("Exception in testLevel"); } } 全てのMBean のモニターレベルを表示 PMIクライアントアプリケーション (サンプル) WebSphere Infrastructure Guide PmiClientSample (7/7) public static ArrayList setStatsForEJBModuleStats(ArrayList myObjectNames) { try { StatelessSessionBean のStats を取得して ArrayList resultArray = new ArrayList(); ejbStatsDataObj に格納 for (int i = 0; myObjectNames.size() > i; i++) { EJBStatsDataObj ejbStatsDataObj = new EJBStatsDataObj(); Stats ejbStats = pmiClinet.getStats(nodeName, serverName, (ObjectName) myObjectNames.get(i), true); ejbStatsDataObj.setBaseStats(ejbStats); if (ejbStats != null) { Stats[] ejbAllMethodStats = ejbStats.getSubStats(); ejbStatsDataObj.setAllMehodStats(ejbAllMethodStats[0]); for (int j = 0; ejbAllMethodStats.length > j; j++) { Stats の中身が空でなければ Stats[] ejbMethodStats = ejbAllMethodStats[j].getSubStats(); SubStats の取得を繰り返して if (ejbMethodStats != null) { for (int k = 0; ejbMethodStats.length > k; k++) { ejbStatsDataObj に格納 ejbStatsDataObj.addMethodStats(ejbMethodStats[k]); } } } } resultArray.add(ejbStatsDataObj); 取得したデータをresultArray に格納 } return resultArray; resultArray を戻す } catch (Exception e) { e.printStackTrace(); return null; } } } PMIクライアントアプリケーション (サンプル) WebSphere Infrastructure Guide StatsDataCalc (1/3) package co.jp.ise.pmi.sample; import java.util.ArrayList; import test.pmi.dataobject.BaseDataObject; import test.pmi.dataobject.EJBStatsDataObj; import com.ibm.websphere.pmi.stat.*; import com.ibm.websphere.pmi.*; import com.ibm.websphere.pmi.client.*; import com.ibm.websphere.pmi.PmiConstants; //admin.jar import com.ibm.websphere.management.*; import com.ibm.websphere.management.exception.*; /** * @author user * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. * To enable and disable the creation of type comments go to * Window>Preferences>Java>Code Generation. */ public class StatsDataCalc { public void deltaStaticticsData(BaseDataObject oldData, BaseDataObject newData) { System.out.println("\n---deltaStaticticsData---\n"); //DataArrayの取得 ArrayList oldStatsData = null; ArrayList newStatsData = null; if (oldData != null) { oldStatsData = oldData.getEjbStatsArray(); } if (newData != null) { newStatsData = newData.getEjbStatsArray(); } PMIクライアントアプリケーション (サンプル) WebSphere Infrastructure Guide StatsDataCalc (2/3) //名前の確認 for (int i = 0; oldStatsData.size() > i; i++) { //oldDataから名前を取得 EJBStatsDataObj oldEjbStatsDataObj = (EJBStatsDataObj) oldStatsData.get(i); String oldEjbName = oldEjbStatsDataObj.getBaseStats().getName(); System.out.println(oldEjbName); //NewDataから一致する名前を検索 for (int j = 0; newStatsData.size() > j; j++) { //newDataから名前を取得 EJBStatsDataObj newEjbStatsDataObj = (EJBStatsDataObj) newStatsData.get(j); String newEjbNaem = newEjbStatsDataObj.getBaseStats().getName(); //一致すれば計算を実施 if (oldEjbName.equals(newEjbNaem)) { //BaseStats Statistic System.out.println("----"+newEjbNaem+":EJB Statistic ----"); Statistic[] oldBaseStatistics = (Statistic[]) oldEjbStatsDataObj.getBaseStats().getStatistics(); Statistic[] newBaseStatistics = (Statistic[]) newEjbStatsDataObj.getBaseStats().getStatistics(); for (int k = 0; oldBaseStatistics.length == newBaseStatistics.length && oldBaseStatistics.length > k; k++) { //newData-oldData Statistic deltaStatistic = newBaseStatistics[k].delta(oldBaseStatistics[k]); //Statictic情報の表示 processStatictics(deltaStatistic,newBaseStatistics[k]); } //AllMethod Statictic System.out.println("----"+newEjbNaem+":All Method Statistic ----"); Statistic[] oldAllMethodStatistics = (Statistic[]) oldEjbStatsDataObj.getAllMehodStats().getStatistics(); Statistic[] newAllMethodStatistics = (Statistic[]) newEjbStatsDataObj.getAllMehodStats().getStatistics(); for (int l = 0; oldAllMethodStatistics.length == newAllMethodStatistics.length && oldAllMethodStatistics.length > l; l++) { //newData-oldData Statistic deltaAllMethodStatistic = newAllMethodStatistics[l].delta(oldAllMethodStatistics[l]); //Statictic情報の表示 processStatictics(deltaAllMethodStatistic,newAllMethodStatistics[l]); } //Method Statictic ArrayList oldMethodStaticticsArray = oldEjbStatsDataObj.getMethodsStats(); ArrayList newMethodStaticticsArray = newEjbStatsDataObj.getMethodsStats(); PMIクライアントアプリケーション (サンプル) WebSphere Infrastructure Guide StatsDataCalc (3/3) for(int m=0;oldMethodStaticticsArray.size()==newMethodStaticticsArray.size()&&oldMethodStaticticsArray.size()>m;m++){ Stats oldMethodStats = (Stats)oldMethodStaticticsArray.get(m); Stats newMethodStats = (Stats)newMethodStaticticsArray.get(m); String MethodName = oldMethodStats.getName(); System.out.println("\n----"+newEjbNaem+":Method ["+MethodName+"] Statistic ----"); Statistic[] oldMethodStatistic = (Statistic[])oldMethodStats.getStatistics(); Statistic[] newMethodStatistic = (Statistic[])newMethodStats.getStatistics(); for(int n=0;oldMethodStatistic.length==newMethodStatistic.length && oldMethodStatistic.length > n;n++){ //newData-oldData Statistic deltaMethodStatistic = newMethodStatistic[n].delta(oldMethodStatistic[n]); //Statictic情報の表示 processStatictics(deltaMethodStatistic,oldMethodStatistic[n]); } } } } } } //データ一覧の表示 private static void processStatictics(Statistic statisticData,Statistic statisticForLabel) { System.out.print("\tdata name=" + statisticForLabel.getName()); if (statisticForLabel.getDataInfo().getType() == com.ibm.websphere.pmi.PmiConstants.TYPE_LONG) { System.out.println("\n\t\t count=" + ((CountStatisticImpl) statisticData).getCount()); } else if (statisticForLabel.getDataInfo().getType() == com.ibm.websphere.pmi.PmiConstants.TYPE_STAT) { TimeStatisticImpl data = (TimeStatisticImpl) statisticData; System.out.println("\n\t\t count=" + data.getCount() + "\n\t\t total=" + data.getTotal() + "\n\t\t mean=" + data.getMean() + "\n\t\t min=" + data.getMin() + "\n\t\t max=" + data.getMax()); } else if (statisticForLabel.getDataInfo().getType() == com.ibm.websphere.pmi.PmiConstants.TYPE_LOAD) { RangeStatisticImpl data = (RangeStatisticImpl) statisticData; System.out.println( "\n\t\t current=" + data.getCurrent() + "\n\t\t lowWaterMark=" + data.getLowWaterMark() + "\n\t\t highWaterMark=" + data.getHighWaterMark() + "\n\t\t integral=" + data.getIntegral() + "\n\t\t avg=" + data.getMean()); } } } 取得データの出力 PMIクライアントアプリケーション (出力結果) WebSphere Infrastructure Guide ----PmiSample:EJB Statistic ---data name=beanModule.returnsDiscarded count=0 data name=beanModule.returnsToPool count=0 data name=beanModule.getsFound count=0 data name=beanModule.getsFromPool count=0 data name=beanModule.activeMethods current=0 lowWaterMark=-1 highWaterMark=-1 integral=0 avg=0.0 data name=beanModule.avgRemoveTime count=0 total=0 mean=0.0 min=-1 max=-1 data name=beanModule.avgCreateTime count=0 total=0 mean=0.0 min=15 max=15 data name=beanModule.avgMethodRt count=0 total=0 mean=0.0 min=0 max=500 data name=beanModule.totalMethodCalls count=0 data name=beanModule.concurrentLives current=1 lowWaterMark=-1 highWaterMark=-1 integral=10703 avg=1.0 data name=beanModule.readyCount current=0 lowWaterMark=-1 highWaterMark=-1 integral=0 avg=0.0 data name=beanModule.destroys count=0 data name=beanModule.instantiates count=0 data name=beanModule.poolSize current=1 lowWaterMark=-1 highWaterMark=-1 integral=10703 avg=1.0 data name=beanModule.avgDrainSize count=0 total=0 mean=0.0 min=0 max=0 data name=beanModule.drainsFromPool count=0 WebSphere Infrastructure Guide verbosegc verbosegc WebSphere Infrastructure Guide   GCの詳細な情報を取得するための基本的なツール JVM引数として設定  -verbosegc  -verbose:gcでも可。 verbosegcの出力ファイル名を指定可能 e.g.) -Xverbosegclog:/usr/WebSphere/AppServer51/logs/server1/verbosegc.log 指定が無い場合は、/logs//native_stderr.logに出力 アプリケーション・サーバー > (サーバー名)> プロセス定義 > Java仮想マシンとたどり、 一般プロパティーの「汎用JVM引き数」  -Xverbosegclog:     WASでは以下で設定  verbosegcの出力内容 -BasicWebSphere Infrastructure Guide = 32), weak 3, final 46, phantom 0>  プロセス起動以降5回目のAllocation失敗。   528byteのオブジェクトを割当てようとしてAllocationに失敗 前回のAFからは4771ms経過 空きヒープサイズ/総ヒープサイズ=(0byte/49,805,904byte)、 Wilderness領域の空きヒープサイズ/Wilderness領域のサイズ= (2,387,520byte/2,621,360byte) 全体として52,427,264byteのうち、 32,538,600byteがFree  actionコードは1。       GCに145msかかり、 30,151,080byteのメモリを解放し、 全体の62%が解放された  GCの内訳はMarkPhase 130ms、SweepPhase 15ms、CompactionPhase は発生していない GC中に確認されたオブジェクト参照はSoftが0個、weakが3個、finalが46個、phantomが0個 GC間隔が短くGCが頻発している場合   まずは-Xms(初期Heapサイズ),-Xmx(最大Heapサイズ)のチューニングを検討 HeapThrashing(Expantionが発生しないギリギリでGCは終わっているが、次のAFに備えるほど大きな領域が確保できていないため GCが頻発する症状)の場合は、-Xminf、-Xmaxfをチューニング -Xgcpolicy:optavgpauseで設定  Mark Phaseに秒単位で時間がかかっていれば、Concurrent Markが効果的な場合もある  Allocation Failureのactionコード WebSphere Infrastructure Guide   0 - The Garbage Collector has tried to allocate from the pinned free list, and failed. 1 - A garbage collection to avoid use of the wilderness. It is designed to avoid compactions by keeping the wilderness available for a large allocation request. 2 - The Garbage Collector has tried to allocate out of the wilderness, and failed. 3 - The Garbage Collector is going to attempt to expand the heap. 4 - The Garbage Collector is going to clear any remaining soft references. This occurs only if less than 12% free space is available in a fully expanded heap. 5 - This action applies only to resettable mode and means that garbage collection is going to try to take some space from the transient heap. 6 - This is not an action. It outputs a verbosegc message to say that the JVM is very low on heap space, or totally out of heap space.      verbosegcの出力内容 -CompactionWebSphere Infrastructure Guide = 32), weak 0, final 82, phantom 0>      プロセス起動以降19回目のAllocation失敗。  21,784byteのオブジェクトを割当てようとしてAllocationに失敗  前回のAFからは19,461ms経過 actionコードは2。  空きヒープサイズ/総ヒープサイズ=(22,799,784byte / 54,655,488byte)、 GCに515msかかり、15,494,792byteのメモリを解放し、 全体の69%が解放された  全体として54,655,488byteのうち、 38,204,576byteがFree GCの内訳はMarkPhase 139ms SweepPhase 19ms ComactionPhase 357ms Compatctionでは259,759個のオブジェクト(約15MB)が移動され、追加で3.584byteが使用された  Reasonコードは11。 CompactionのReasonコード WebSphere Infrastructure Guide  1 - Following the mark and sweep phase, not enough free space is available for the allocation request. 2 - The heap is fragmented and will benefit from a compaction. 3 - Less than half the -Xminf value is free space (the default is 30% in which case this will be less than 15% free space), and the free space plus the dark matter is not less than -Xminf. 4 - A System.gc() collection. 5 - Less than 5% free space is available. 6 - Less than 128 KB free space is available. 7 - The -Xcompactgc parameter has been specified. 8 - The transient heap has less than 5% free space available. 11 - A compaction occurred before the attempt to shrink the heap. 12 - An incremental compaction occurred because of excessive dark matter 13 - The -Xpartialcompactgc parameter has been specified.             14 - An incremental compaction occurred because of wilderness expansion. 15 - An incremental compaction occurred because not enough free space is available in the wilderness. = 32), weak 0, final 37, phantom 0> verbosegcの出力内容 -Heap Expansion- WebSphere Infrastructure Guide   43KbのオブジェクトのAllocationに失敗し、起動以来11回目のGCが発生。 GCが発生し534msで、3,931,000byteを解放し、空き領域を55%確保。   それでもAllocationに失敗 ⇒ MemoryのFragmentationが発生している Compactionの発生条件には当てはまらないので、Compactionは発生していない   actionコード3でHeap expansionが発生  Heapを6,291,456byte拡張し全体で58,718,720byteに。60%の空き領域を確保 起動直後に頻発しているようであれば-Xmsで初期HeapSizeのチューニングを検討 -Xmineで最小拡張サイズを大きくチューニングし、Expansionの回数を減らすことも可能 安定したHeapSizeに達するまでにExpansionが頻発   verbosegcの出力内容 -Heap ShrinkageWebSphere Infrastructure Guide = 32), weak 0, final 309, phantom 0>      43,520byteのオブジェクトのAllocationに失敗し、起動以来20回目のGCが発生。 Actionコードは1 Heap Shrinkageが発生  2,162,688byte縮小し、Total52,492,800byteに。68%の領域がFree GC全体では35,402,888byteを解放、52,492,800byteのうち35,907,688がFree ちなみにこれは3ページ前のCompactionの直後に発生したHeap Shrinkageです。 WebSphere Infrastructure Guide Heap Watcher HeapWatcher WebSphere Infrastructure Guide [04/06/12 [04/06/12 [04/06/12 [04/06/12 [04/06/12 [04/06/12 [04/06/12 [04/06/12 [04/06/12 [04/06/12 [04/06/12  メモリーの使用量をモニターするツール  verbosegcと異なり,GC発生時のみではなく、常時メモリーの利用量をモニターできる  新規のJava Threadを作成し,定期的にHeapサイズを取得します  以下のJavaの基本的なAPIを使って情報を取得   java.lang.Runtime.getRuntime().totalMemory() java.lang.Runtime.getRuntime().freeMemory()  指定した間隔でSystemOut.log / SystemErr.logに出力  デプロイメント・ディスクリプターに以下を初期設定パラメーターとして設定可能    isOutStdout [ true | false ] (デフォルトtrue) isOutStderr [ true | false ] (デフォルトtrue) interval [更新間隔(msec)] (デフォルト60,000)  始動時ロードにチェックしておくことで、AppServer起動時からの情報取得可能 68bc3e7f 68bc3e7f 68bc3e7f 68bc3e7f 68bc3e7f 68bc3e7f 68bc3e7f 68bc3e7f 68bc3e7f 68bc3e7f 68bc3e7f SystemErr SystemErr SystemErr SystemErr SystemErr SystemErr SystemErr SystemErr SystemErr SystemErr SystemErr R R R R R R R R R R R 2004/06/12 2004/06/12 2004/06/12 2004/06/12 2004/06/12 2004/06/12 2004/06/12 2004/06/12 2004/06/12 2004/06/12 2004/06/12 21:36:13 21:37:13 21:38:13 21:39:13 21:40:13 21:41:13 21:42:13 21:43:13 21:44:13 21:45:13 21:46:13 [HeapWatcher] [HeapWatcher] [HeapWatcher] [HeapWatcher] [HeapWatcher] [HeapWatcher] [HeapWatcher] [HeapWatcher] [HeapWatcher] [HeapWatcher] [HeapWatcher] freeMemory()=26834720 freeMemory()=24808048 freeMemory()=29192808 freeMemory()=24998528 freeMemory()=26993232 freeMemory()=26662464 freeMemory()=26993216 freeMemory()=26200616 freeMemory()=22821448 freeMemory()=24493400 freeMemory()=26233624 totalMemory()=53082624 totalMemory()=53082624 totalMemory()=53082624 totalMemory()=53082624 totalMemory()=53082624 totalMemory()=53082624 totalMemory()=53082624 totalMemory()=53082624 totalMemory()=53082624 totalMemory()=53082624 totalMemory()=53082624 21:36:13:077 21:37:13:084 21:38:13:080 21:39:13:086 21:40:13:083 21:41:13:089 21:42:13:085 21:43:13:081 21:44:13:088 21:45:13:084 21:46:13:090 JST] JST] JST] JST] JST] JST] JST] JST] JST] JST] JST] HeapWatcherの使い方 WebSphere Infrastructure Guide   以下のサイトからHeapWatcherをダウンロード  http://www-6.ibm.com/jp/software/websphere/developer/hanbetsu/vol5.html 適宜earファイルにまとめて、WASにインストール   必要に応じて、デプロイメント・ディスクリプターに初期パラメーターを設定 java.lang.Thread.stop( )メソッドはdeprecatedされているため、interrupt( )に置換え   ログへの出力をcsv化するシェルも付属しているのでグラフ化も容易 簡単なブラウザーでのコントローラー、モニターも提供

Related docs
premium docs
Other docs by LeeGreenwood