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化するシェルも付属しているのでグラフ化も容易 簡単なブラウザーでのコントローラー、モニターも提供