ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server診断フレームワークの構成と使用
12cリリース1(12.1.1)
B65916-02
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストヘ移動
製品
目次へ移動
目次

前
 
次
 

B WLDFインストゥルメンテーション・ライブラリ

WebLogic診断フレームワークのインストゥルメンテーション・ライブラリには診断モニターと診断アクションが含まれています。次の項は、これらのライブラリについて説明します。

インストゥルメンテーション・ライブラリの項目の使用方法は、第11章「インストゥルメンテーションの構成」を参照してください。

診断モニター・ライブラリ

診断モニターは、サーバー・スコープのモニターとアプリケーション・スコープのモニターに大別されます。サーバー・スコープのモニターはWebLogic Serverクラスのインストゥルメントに使用できます。アプリケーション・スコープのモニターはアプリケーション・クラスのインストゥルメントに使用します。DyeInjectionモニターを除くすべてのモニターは委任モニターで、組込みの診断アクションがありません。代わりに、モニターにアタッチされているアクションに委任して、診断アクティビティを実行します。

すべてのモニターには、それぞれのポイントカットがあらかじめ構成されています。ただし、その作用を受ける実際の場所はインストゥルメントされるクラスによって異なります。たとえば、Servlet_Before_Serviceモニターでは、様々なサーブレット実装のいろいろな場所にあるサーブレットまたはJava Server Page (JSP)サービス・メソッドの入口に診断コードが追加されます。

すべての委任モニターには、対応するアクションのみをアタッチできます。対応するかどうかはモニターの性質によって決まります。

次の表では、サーバー・スコープ(WebLogic Serverクラス)内で使用できる診断モニターをリストして説明します。各モニターに対応する診断アクションについては、表B-1対応アクション・タイプ列を参照してください。

表B-1 サーバー・スコープ内で使用する診断モニター

モニター名 モニター・タイプ 対応アクション・タイプ ポイントカット

Connector_Before_Inbound

ステートレス

着信接続を処理するメソッドの入口。

Connector_After_Inbound

サーバー

ステートレス

着信接続を処理するメソッドの出口。

Connector_Around_Inbound

前後

前後

着信接続を処理するメソッドの入口と出口。

Connector_Before_Outbound

ステートレス

発信接続を処理するメソッドの入口。

Connector_After_Outbound

ステートレス

発信接続を処理するメソッドの出口。

Connector_Around_Outbound

前後

前後

発信接続を処理するメソッドの入口と出口。

Connector_Before_Tx

ステートレス

トランザクションの登録、登録解除、開始、ロールバック、コミットを行うメソッドの入口。

Connector_After_Tx

ステートレス

トランザクションの登録、登録解除、開始、ロールバック、コミットを行うメソッドの出口。

Connector_Around_Tx

前後

前後

トランザクションの登録、登録解除、開始、ロールバック、コミットを行うメソッドの入口と出口。

Connector_Before_Work

ステートレス

コネクタの作業項目のスケジューリング、開始、実行に関するメソッドの入口。

Connector_After_Work

ステートレス

コネクタの作業項目のスケジューリング、開始、実行に関するメソッドの出口。

Connector_Around_Work

前後

前後

コネクタの作業項目のスケジューリング、開始、実行に関するメソッドの入口と出口。

DyeInjection

組込み

リクエストがサーバーに届く場所。

JDBC_Before_Commit_Internal

ステートレス

JDBCサブシステムの内部コード。

JDBC_After_Commit_Internal

ステートレス

JDBCサブシステムの内部コード。

JDBC_Before_Connection_

Internal

ステートレス

以下のメソッドの呼出しの前。

Driver.connect

DataSource.getConnection

JDBC_After_Connection_Internal

ステートレス

JDBCサブシステムの内部コード。

JDBC_Before_Rollback_Internal

ステートレス

JDBCサブシステムの内部コード。

JDBC_After_Rollback_Internal

ステートレス

JDBCサブシステムの内部コード。

JDBC_Before_Start_Internal

ステートレス

JDBCサブシステムの内部コード。

JDBC_After_Start_Internal

ステートレス

JDBCサブシステムの内部コード。

JDBC_Before_Statement_

Internal

ステートレス

JDBCサブシステムの内部コード。

JDBC_After_Statement_

Internal

ステートレス

JDBCサブシステムの内部コード。

JDBC_After_Reserve_Connection_Internal

ステートレス

JDBC接続が接続プールから控えられるとき。

JDBC_After_Release_Connection_Internal

ステートレス

JDBC接続が接続接続プールに解放された後。


表B-2はアプリケーション・スコープ(デプロイ済アプリケーション)内で使用できる診断モニターをリストします。対応アクション・タイプ列は、各モニターに対応する診断アクションを示します。

表B-2 アプリケーション・スコープ内で使用する診断モニター

モニター名 モニター・タイプ 対応アクション・タイプ ポイントカット

EJB_After_EntityEjbBusiness Methods

ステートレス

すべてのEntityBeanメソッドの出口。これは標準のEJBメソッドではありません。

EJB_Around_EntityEjbBusinessMethods

前後

前後

すべてのEntityBeanメソッドの入口と出口。これは標準のEJBメソッドではありません。

EJB_After_EntityEjbMethods

ステートレス

以下のメソッドの出口。

EnitityBean.setEntityContext

EnitityBean.unsetEntityContext

EnitityBean.ejbRemove

EnitityBean.ejbActivate

EnitityBean.ejbPassivate

EnitityBean.ejbLoad

EnitityBean.ejbStore

EJB_Around_EntityEjbMethods

前後

前後

以下のメソッドの出口。

EnitityBean.setEntityContext

EnitityBean.unsetEntityContext

EnitityBean.ejbRemove

EnitityBean.ejbActivate

EnitityBean.ejbPassivate

EnitityBean.ejbLoad

EnitityBean.ejbStore

EJB_After_EntityEjbSemantic Methods

ステートレス

以下のメソッドの出口。

EnitityBean.set*

EnitityBean.get*

EnitityBean.ejbFind*

EnitityBean.ejbHome*

EnitityBean.ejbSelect*

EnitityBean.ejbCreate*

EnitityBean.ejbPostCreate*

EJB_Around_EntityEjbSemanticMethods

前後

前後

以下のメソッドの入口と出口。

EnitityBean.set*

EnitityBean.get*

EnitityBean.ejbFind*

EnitityBean.ejbHome*

EnitityBean.ejbSelect*

EnitityBean.ejbCreate*

EnitityBean.ejbPostCreate*

EJB_After_SessionEjbMethods

ステートレス

以下のメソッドの出口。

SessionBean.setSessionContext

SessionBean.ejbRemove

SessionBean.ejbActivate

SessionBean.ejbPassivate

EJB_Around_SessionEjbMethods

前後

前後

以下のメソッドの入口と出口。

SessionBean.setSessionContext

SessionBean.ejbRemove

SessionBean.ejbActivate

SessionBean.ejbPassivate

EJB_After_SessionEjbBusinessMethods

ステートレス

すべてのSessionBeanメソッドの出口。これは標準のEJBメソッドではありません。

EJB_Around_SessionEjb

BusinessMethods

前後

前後

すべてのSessionBeanメソッドの入口と出口。これは標準のEJBメソッドではありません。

EJB_After_SessionEjbSemanticMethods

ステートレス

以下のメソッドの出口。

SessionBean.ejbCreateSessionBean.ejbPostCreate

EJB_Around_SessionEjb

SemanticMethods

前後

前後

以下のメソッドの入口と出口。

SessionBean.ejbCreate

SessionBean.ejbPostCreate

EJB_Before_EntityEjbBusinessMethods

ステートレス

すべてのEntityBeanメソッドの出口。これは標準のEJBメソッドではありません。

EJB_Before_EntityEjbMethods

ステートレス

以下のメソッドの入口。

EnitityBean.setEntityContext

EnitityBean.unsetEntityContext

EnitityBean.ejbRemove

EnitityBean.ejbActivate

EnitityBean.ejbPassivate

EnitityBean.ejbLoad

EnitityBean.ejbStore

EJB_Before_EntityEjbSemanticMethods

ステートレス

以下のメソッドの入口。

EnitityBean.set*

EnitityBean.get*

EnitityBean.ejbFind*

EnitityBean.ejbHome*

EnitityBean.ejbSelect*

EnitityBean.ejbCreate*

EnitityBean.ejbPostCreate*

EJB_Before_SessionEjb

BusinessMethods

ステートレス

すべてのSessionBeanメソッドの出口。これは標準のEJBメソッドではありません。

EJB_Before_SessionEjbMethods

ステートレス

以下のメソッドの入口。

SessionBean.setSessionContext

SessionBean.ejbRemove

SessionBean.ejbActivate

SessionBean.ejbPassivate

EJB_Before_SessionEjb

SemanticMethods

ステートレス

以下のメソッドの入口。

SessionBean.ejbCreate

SessionBean.ejbPostCreate

HttpSessionDebug

前後

組込み

getSession - 返されたHTTPセッションを検査

以下のメソッドの呼出しの前後。

getAttribute

setAttribute

removeAttribute

検査点で、およそのセッションのサイズが計算され、生成されたイベントのペイロードとして格納されます。このサイズはセッションをバイト配列にフラット化することで計算されます。セッションをフラット化する際にエラーが発生した場合は、負のサイズが報告されます。

JDBC_Before_CloseConnection

ステートレス

以下のメソッドの呼出しの前。

Connection.close

JDBC_After_CloseConnection

ステートレス

以下のメソッドの呼出しの後。

Connection.close

JDBC_Around_CloseConnection

前後

前後

以下のメソッドの呼出しの前後。

Connection.close

JDBC_Before_CommitRollback

ステートレス

以下のメソッドの呼出しの前。

Connection.commit

Connection.rollback

JDBC_After_CommitRollback

ステートレス

以下のメソッドの呼出しの後。

Connection.commit

Connection.rollback

JDBC_Around_CommitRollback

前後

前後

以下のメソッドの呼出しの前後。

Connection.commit

Connection.rollback

JDBC_Before_Execute

ステートレス

以下のメソッドの呼出しの前。

Statement.execute*

PreparedStatement.execute*

JDBC_After_Execute

ステートレス

以下のメソッドの呼出しの後。

Statement.execute*

PreparedStatement.execute*

JDBC_Around_Execute

前後

前後

以下のメソッドの呼出しの前後。

Statement.execute*

PreparedStatement.execute*

JDBC_Before_GetConnection

ステートレス

以下のメソッドの呼出しの前。

Driver.connect

DataSource.getConnection

JDBC_After_GetConnection

ステートレス

以下のメソッドの呼出しの後。

Driver.connect

DataSource.getConnection

JDBC_Around_GetConnection

前後

前後

以下のメソッドの呼出しの前後。

Driver.connect

DataSource.getConnection

JDBC_Before_Statement

ステートレス

以下のメソッドの呼出しの前。

Connection.prepareStatement

Connection.prepareCall

Statement.addBatch

RowSet.setCommand

JDBC_After_Statement

ステートレス

以下のメソッドの呼出しの後。

Connection.prepareStatement

Connection.prepareCall

Statement.addBatch

RowSet.setCommand

JDBC_Around_Statement

前後

前後

以下のメソッドの呼出しの前後。

Connection.prepareStatement

Connection.prepareCall

Statement.addBatch

RowSet.setCommand

JMS_Before_AsyncMessage

Received

ステートレス

以下のメソッドの入口。

MessageListener.onMessage

JMS_After_AsyncMessage

Received

ステートレス

以下のメソッドの出口。

MessageListener.onMessage

JMS_Around_AsyncMessage

Received

前後

前後

以下のメソッドの入口と出口。

MessageListener.onMessage

JMS_Before_MessageSent

ステートレス

以下のメソッドの呼出しの前。

QueSender send

JMS_After_MessageSent

ステートレス

以下のメソッドの呼出しの後。

QueSender send

JMS_Around_MessageSent

前後

前後

以下のメソッドの呼出しの前後。

QueSender send

JMS_Before_SyncMessage

Received

ステートレス

以下のメソッドの呼出しの前。

MessageConsumer.receive*

JMS_After_SyncMessage

Received

ステートレス

以下のメソッドの呼出しの後。

MessageConsumer.receive*

JMS_Around_SyncMessage

Received

前後

前後

以下のメソッドの呼出しの前後。

MessageConsumer.receive*

JMS_Before_TopicPublished

ステートレス

以下のメソッドの呼出しの前。

TopicPublisher.publish

JMS_After_TopicPublished

ステートレス

以下のメソッドの呼出しの後。

TopicPublisher.publish

JMS_Around_TopicPublished

前後

前後

以下のメソッドの呼出しの前後。

TopicPublisher.publish

JNDI_Before_Lookup

ステートレス

javax.naming.Contextのlookupメソッドの呼出しの前。

Context.lookup*

JNDI_After_Lookup

ステートレス

javax.naming.Contextのlookupメソッドの呼出しの後。

Context.lookup*

JNDI_Around_Lookup

前後

前後

javax.naming.Contextのlookupメソッドの呼出しの前後。

Context.lookup*

JTA_Before_Commit

ステートレス

以下のメソッドの入口。

UserTransaction.commit

JTA_After_Commit

ステートレス・アドバイス

以下のメソッドの出口。

UserTransaction.commit

JTA_Around_Commit

前後

前後

以下のメソッドの入口と出口。

UserTransaction.commit

JTA_Before_Rollback

ステートレス

以下のメソッドの入口。

UserTransaction.rollback

JTA_After_Rollback

ステートレス・アドバイス

以下のメソッドの出口。

UserTransaction.rollback

JTA_Around_Rollback

前後

前後

以下のメソッドの入口と出口。

UserTransaction.rollback

JTA_Before_Start

ステートレス

以下のメソッドの入口。

UserTransaction.begin

JTA_After_Start

ステートレス・アドバイス

以下のメソッドの出口。

UserTransaction.begin

JTA_Around_Start

前後

前後

以下のメソッドの入口と出口。

UserTransaction.begin

MDB_Before_MessageReceived

ステートレス

以下のメソッドの入口。

MessageDrivenBean.onMessage

MDB_After_MessageReceived

ステートレス

以下のメソッドの出口。

MessageDrivenBean.onMessage

MDB_Around_MessageReceived

前後

前後

以下のメソッドの入口と出口。

MessageDrivenBean.onMessage

MDB_Before_Remove

ステートレス

以下のメソッドの入口。

MessageDrivenBean.ejbRemove

MDB_After_Remove

ステートレス

以下のメソッドの出口。

MessageDrivenBean.ejbRemove

MDB_Around_Remove

前後

前後

以下のメソッドの入口と出口。

MessageDrivenBean.ejbRemove

MDB_Before_SetMessageDriven

Context

ステートレス

以下のメソッドの入口。

MessageDrivenBean.setMessage

DrivenContext

MDB_After_SetMessageDriven

Context

ステートレス

以下のメソッドの出口。

MessageDrivenBean.setMessageDrivenContext

MDB_Around_SetMessageDriven

Context

前後

前後

以下のメソッドの入口と出口。

MessageDrivenBean.setMessageDrivenContext

Servlet_Before_Service

ステートレス

以下のサーブレットまたはJSPメソッドの入口。

HttpJspPage._jspService

Servlet.service

HttpServlet.doGet

HttpServlet.doPost

Filter.doFilter

Servlet_After_Service

ステートレス

以下のサーブレットまたはJSPメソッドの出口。

HttpJspPage._jspService

Servlet.service

HttpServlet.doGet

HttpServlet.doPost

Filter.doFilter

Servlet_Around_Service

前後

前後

以下のサーブレットまたはJSPメソッドの入口と出口。

HttpJspPage._jspService

Servlet.service

HttpServlet.doGet

HttpServlet.doPost

Filter.doFilter

Servlet_Before_Session

ステートレス

以下のサーブレット・メソッドの呼出しの前。

HttpServletRequest.getSession

HttpSession.setAttribute/

putValue

HttpSession.getAttribute/

getValue

HttpSession.removeAttribute/

removeValue

HttpSession.invalidate

Servlet_Around_Session

前後

前後

以下のサーブレット・メソッドの呼出しの前後。

HttpServletRequest.getSession

HttpSession.setAttribute/

putValue

HttpSession.getAttribute/

getValue

HttpSession.removeAttribute/

removeValue

HttpSession.invalidate

Servlet_After_Session

ステートレス

以下のサーブレット・メソッドの呼出しの後。

HttpServletRequest.getSession

HttpSession.setAttribute/

putValue

HttpSession.getAttribute/

getValue

HttpSession.removeAttribute/

removeValue

HttpSession.invalidate

Servlet_Before_Tags

ステートレス

以下のJSPメソッドの呼出しの前。

Tag.doStartTag

Tag.doEndTag

Servlet_After_Tags

ステートレス

以下のJSPメソッドの呼出しの後。

Tag.doStartTag

Tag.doEndTag

Servlet_Around_Tags

前後

前後

以下のJSPメソッドの呼出しの前後。

Tag.doStartTag

Tag.doEndTag


診断アクション・ライブラリ

診断アクション・ライブラリには、以下のアクションが含まれます。

これらの診断アクションは、上の2つの表で説明した委任モニターで使用できます。また、ユーザーが定義してアプリケーション内で使用できるカスタム・モニターと一緒に使用することもできます。各診断アクションは、対応モニター・タイプ列に示されている対応するモニターとのみ一緒に使用できます。いくつかの動作(たとえば、TraceElapsedTimeAction)がイベント・ペイロードを生成します。

TraceAction

TraceActionはStatelessアクションで、BeforeおよびAfterモニター・タイプに対応しています。

TraceActionは、プログラムの実行中に作用場所にトレース・イベントを生成します。以下の情報が生成されます。

  • タイムスタンプ

  • リクエストを一意に特定する診断コンテキストからのコンテキスト識別子

  • トランザクション識別子(可能な場合)

  • ユーザーID

  • アクション・タイプ(つまりTraceAction)

  • ドメイン

  • サーバー名

  • インストゥルメンテーション・スコープ名(たとえばアプリケーション名)

  • 診断モニター名

  • モジュール名

  • コード内でアクションをコールした場所。場所情報には次が含まれます。

    • クラス名

    • メソッド名

    • メソッド・シグネチャ

    • 行番号

    • スレッド名

  • 診断コンテキストによって保持されるペイロード(存在する場合)

DisplayArgumentsAction

DisplayArgumentsActionはStatelessアクションで、BeforeおよびAfterモニター・タイプに対応しています。

DisplayArgumentsActionは、プログラムの実行中に作用場所にインストゥルメンテーション・イベントを生成し、メソッドの引数または戻り値をキャプチャします。

このアクションが実行されると、イベント・アーカイブにディスパッチされるインストゥルメンテーション・イベントが発生します。インストゥルメンテーション・イベントがBeforeモニターにアタッチされた場合は、ジョインポイントへの入力引数(たとえばメソッド引数)がキャプチャされます。インストゥルメンテーション・イベントがAfterモニターにアタッチされた場合は、ジョインポイントからの戻り値がキャプチャされます。イベントは、以下の情報を保持します。

  • タイムスタンプ

  • リクエストを一意に特定する診断コンテキストからのコンテキスト識別子

  • トランザクション識別子(可能な場合)

  • ユーザーID

  • アクション・タイプ(つまりDisplayArgumentsAction)

  • ドメイン

  • サーバー名

  • インストゥルメンテーション・スコープ名(たとえばアプリケーション名)

  • 診断モニター名

  • モジュール名

  • コード内でアクションをコールした場所。場所情報には次が含まれます。

    • クラス名

    • メソッド名

    • メソッド・シグネチャ

    • 行番号

    • スレッド名

  • 診断コンテキストによって保持されるペイロード(存在する場合)

  • Beforeモニターにアタッチされたときの入力引数(存在する場合)

  • Afterモニターにアタッチされたときの戻り値(存在する場合)

TraceElapsedTimeAction

TraceElapsedTimeActionはAroundアクションで、Aroundモニター・タイプに対応しています。

TraceElapsedTimeActionは2つのイベント(プログラム実行中の特定の場所の前と後)を生成します。

このアクションが実行されると、関連付けられたジョインポイントの実行前と実行後のタイムスタンプがキャプチャされます。そして、これらの差を計算することで経過時間が算出されます。このアクションでは、イベント・アーカイブにディスパッチされるインストゥルメンテーション・イベントが生成されます。経過時間は、イベント・ペイロードとして格納されます。イベントは、以下の情報を保持します。

  • タイムスタンプ

  • リクエストを一意に特定する診断コンテキストからのコンテキスト識別子

  • トランザクション識別子(可能な場合)

  • ユーザーID

  • アクション・タイプ(つまりTraceElapsedTimeAction)

  • ドメイン

  • サーバー名

  • インストゥルメンテーション・スコープ名(たとえばアプリケーション名)

  • 診断モニター名

  • モジュール名

  • コード内でアクションをコールした場所。場所情報は次から構成されます。

    • クラス名

    • メソッド名

    • メソッド・シグネチャ

    • 行番号

    • スレッド名

  • 診断コンテキストによって保持されるペイロード(存在する場合)

  • ジョインポイントの処理にかかったナノ秒単位の時間(イベント・ペイロードとして)

TraceMemoryAllocationAction

TraceMemoryAllocationActionは、メソッド呼出しのとき、スレッドにより割り当てられたバイト数をトレースするためにJRockit APIを使用します。このアクションは、メソッド呼出し内に割り当てられたメモリーがトレースされる点を除けば、TraceElapsedTimeActionとよく似ています。

TraceMemoryAllocationActionのアクションは次のとおりです。

  • 永続化されたインストゥルメンテーション・イベントを作成します。

  • 委任とカスタム監視から使用できます。

StackDumpAction

StackDumpActionはStatelessアクションで、BeforeおよびAfterモニター・タイプに対応しています。

StackDumpActionは、プログラムの実行中に作用場所にインストゥルメンテーション・イベントを生成し、スタック・ダンプをキャプチャします。

このアクションが実行されると、イベント・アーカイブにディスパッチされるインストゥルメンテーション・イベントが生成されます。スタック・トレースは、イベント・ペイロードとしてキャプチャされます。イベントは、以下の情報を保持します。

  • タイムスタンプ

  • リクエストを一意に特定する診断コンテキストからのコンテキスト識別子

  • トランザクション識別子(可能な場合)

  • ユーザーID

  • アクション・タイプ(つまりStackDumpAction)

  • ドメイン

  • サーバー名

  • インストゥルメンテーション・スコープ名(たとえばアプリケーション名)

  • 診断モニター名

  • モジュール名

  • コード内でアクションをコールした場所。場所情報は次から構成されます。

    • クラス名

    • メソッド名

    • メソッド・シグネチャ

    • 行番号

    • スレッド名

  • 診断コンテキストによって保持されるペイロード(存在する場合)

  • スタック・トレース(イベント・ペイロードとして)

ThreadDumpAction

ThreadDumpActionはStatelessアクションで、BeforeおよびAfterモニター・タイプに対応しています。

ThreadDumpActionは、プログラムの実行中に影響のある場所にインストゥルメンテーション・イベントを生成し、スレッド・ダンプをキャプチャします(基底のVMのサポート対象となっている場合)。JDK 1.6 (Oracle JRockitおよびSun)ではこのアクションをサポートします。

このアクションでは、イベント・アーカイブにディスパッチされるインストゥルメンテーション・イベントが生成されます。このアクションはJRockit JVMでのみ使用できます。他のJVMの場合は無視されます。スレッド・ダンプは、イベント・ペイロードとしてキャプチャされます。イベントは、以下の情報を保持します。

  • タイムスタンプ

  • リクエストを一意に特定する診断コンテキストからのコンテキスト識別子

  • トランザクション識別子(可能な場合)

  • ユーザーID

  • アクション・タイプ(つまりThreadDumpAction)

  • ドメイン

  • サーバー名

  • インストゥルメンテーション・スコープ名(たとえばアプリケーション名)

  • 診断モニター名

  • モジュール名

  • コード内でアクションをコールした場所。場所情報は次から構成されます。

    • クラス名

    • メソッド名

    • メソッド・シグネチャ

    • 行番号

    • スレッド名

  • 診断コンテキストによって保持されるペイロード(存在する場合)

  • スレッド・ダンプ(イベント・ペイロードとして)

MethodInvocationStatisticsAction

MethodInvocationStatisticsActionはAroundアクションで、Aroundモニター・タイプに対応しています。

MethodInvocationStatisticsActionは、呼出しごとにイベントをアーカイブに保存せずに、ジョインポイント前後のパフォーマンス・メトリックをメモリーにキャプチャします。統計が収集され、WLDFInstrumentationRuntimeMBeanで利用できます。収集された統計は、ハーベスタ・コンポーネントや監視と通知コンポーネントでも使用できます。これによって、インストゥルメンテーション・システムからのリクエスト情報と他のランタイムMBeanからのメトリック情報を結合可能な監視ルールを作成できます。

キャプチャが可能な統計の一部を次に示します。

  • 呼出しの数

  • 平均実行時間(ナノ秒単位)

  • 観察対象実行時間の標準偏差

  • 最小実行時間

  • 最大実行時間

任意のスコープのWLDFInstrumentationRuntimeMBeanインスタンスは、MethodInvocationStatistics属性を使用して、構成されているAround診断モニターにアタッチされているMethodInvocationStatisticsActionインスタンスから収集したデータを公開します。図B-1に示すように、MethodInvocationStatistics属性には、Mapオブジェクトの階層が含まれます。

図B-1 MethodInvocationStatistics属性の構造

図B-1の説明については以下を参照
「図B-1 MethodInvocationStatistics属性の構造」の説明

MethodInvocationStatistics属性では、次のセマンティクスが使用されます。

  MethodInvocationStatistics::= Map<className, MethodMap>
  MethodMap::= Map<methodName, MethodParamsSignatureMap>
  MethodParamsSignatureMap::= Map<MethodParamsSignature, MethodDataMap>
  MethodDataMap::= <MetricName, Statistic>
  MetricName:= min | max | avg | count | sum | sum_of_squares | std_deviation

MethodInvocationStatisticsActionは、情報をメモリーにのみキャプチャしてアーカイブには保存しないため、このアクションでは、他のインストゥルメンテーション・アクションのI/Oオーバーヘッドが生じることはありません。そのため、このアクションはパフォーマンス統計をキャプチャして、アプリケーションのボトルネックの特定に役立つ軽量メカニズムになります。マップ構造をナビゲートして、アプリケーションのパフォーマンスが低い箇所を特定できます。

MethodInvocationStatisticsActionを使用したアプリケーションのインストゥルメントと結果に対する問合せ

この項では、MethodInvocationStatisticsActionを使用するカスタム・モニターでサンプル・アプリケーションAvitek Medical Records(MedRec)をインストゥルメントする例を示します。次にこの例では、WLSTオンラインを使用して、収集されたパフォーマンス統計に問合せを実行する方法を示します。この問合せを実行するには、インストゥルメントされたアプリケーションに関連するWLDFInstrumentationRuntimeMBeanインスタンスをナビゲートします。

WLSTオンラインでは、MBeanに簡単にアクセスできます。JMX APIでは、MBeanに対して照会を行なうためにJMXオブジェクト名を使用する必要がありますが、WLSTでは、ファイル・システム内のファイルの階層を移動するのと同様なやり方で、MBeanの階層を移動できます。詳細は、『Oracle WebLogic Scripting Tool』のMBeanのナビゲートと照会に関する項を参照してください。

この例には、次の項が含まれています。


注意:

WebLogic Serverをインストールすると、Java EE APIおよび他のWebLogic Serverの機能を示すサンプル・コードも提供されます。これらのサンプル・コードを利用しながら作業するには、WebLogic Serverをインストールする際にカスタム・インストール・オプションを選択し、WebLogic Serverのサンプルのインストールを選択します。詳細は、『Oracle WebLogic Serverの紹介』のサンプル・コードとサンプル・アプリケーションに関する項を参照してください。


MethodInvocationStatisticsActionを使用するためのカスタム・モニターの構成

WebLogic Server 10.3以降では、カスタム・モニターの構成でアプリケーションのMETA-INFディレクトリにweblogic-diagnostics.xmlファイルを作成する必要がなくなりました。かわりに、MedRecサンプル・アプリケーションをインストゥルメントする次の手順に従い、管理コンソールから必要な手順をすべて実行できます。

  1. 管理コンソールの「ドメイン構造」ペインで「デプロイメント」を選択します。

  2. 「デプロイメントのサマリー」ページで、「制御」を選択し、「デプロイメント」表でmedrecをクリックします。

    「medrecの設定」ページが表示されます。

  3. 「構成」「インストゥルメンテーション」を選択します。

  4. 「このモジュールの診断監視」表で、「カスタム監視を追加」をクリックします。

  5. 「カスタム監視を追加」ページで、モニター名にMethodStatsMonitorと入力します。簡単な説明をオプションで入力できます。

  6. 「場所のタイプ」選択ボックスで、「前後」を選択します。

  7. 「ポイントカット」テキスト・ボックスで、次のポイントカット式を入力します。

    execution(public * com.bea.medrec.* *(...)) AND NOT
    execution(public * com.bea.medrec.* get*(...)) OR
    execution(public * com.bea.medrec.* set*(...)) OR
    execution(public * com.bea.medrec.* __WL_*(...)));
    

    このポイントカット式は、名前がcom.bea.medrecで始まるパッケージ内のクラスのすべてのパブリック・メソッドのジョインポイントを指定します。ただし、次のメソッドは除外されます。

    • すべてのアクセサ・メソッド

    • 文字列__WL_で始まるメソッド

    このポイントカット式には、MedRecの様々なパブリック・メソッドとクラスが含まれます。ただし、すべてのgetterメソッドとsetterメソッド、およびWebLogic Serverで生成されるコードは無視されます。

  8. ポイントカット式のテキスト・ボックスの下で「OK」をクリックします。

  9. 「デプロイメント・プランの保存」ページで、デプロイメント・プランの新しいパスを入力するか、デフォルトの場所を受け入れ、「OK」をクリックします。

  10. 「構成」「インストゥルメンテーション」を選択して、「このモジュールの診断監視」表にリストされている新しいカスタム・モニターの名前MethodStatsMonitorをクリックします。

    「MethodStatsMonitorの設定」ページが表示されます。

  11. 図B-2に示すように、「アクション」表で、カスタム・モニターにMethodInvocationStatisticsActionを割り当てます。

    図B-2 カスタム・モニターへのMethodInvocationStatisticsActionの選択

    図B-2の説明については以下を参照
    「図B-2 カスタム・モニターへのMethodInvocationStatisticsActionの選択」の説明

  12. 「MethodStatsMonitorの設定」ページの下部で「保存」をクリックします。

  13. 更新されたデプロイメント・プランをMedRecアプリケーションに適用します。

    1. 「ドメイン構造」ペインで、「デプロイメント」を選択します。

    2. 「デプロイメントのサマリー」ページで「制御」を選択し、図B-3に示すように、「デプロイメント」表でmedrecに隣接する選択ボックスをクリックします。

      図B-3 MedRecデプロイメントの選択

      図B-3の説明については以下を参照
      「図B-3 MedRecデプロイメントの選択」の説明

    3. 「更新」をクリックします。

    4. 「アプリケーション更新アシスタント」ページで、「このアプリケーションを次のデプロイメント・ファイルを使用して再デプロイします。」を選択します。

    5. 「次」「終了」の順にクリックします。

MedRecアプリケーションが再デプロイされ、カスタム・モニターMethodStatsMonitorがアクティブになります。


注意:

Javaホットスワップが有効ではない場合、アプリケーションの構成に新しいポイントカットを追加するには、カスタム・モニターをアプリケーション・コードにウィービングできるようにアプリケーションを再デプロイする必要があります。(ただし、アプリケーションのモニター構成の大部分は再デプロイせずに変更できます。たとえば、カスタム・モニターの「アクション」、「プロパティ」、「仕分けフィルタの有効化」、「説明」の各属性(つまり、バイトコードのウィービングを必要としない属性)などを変更できます。

ただし、ホットスワップが有効な場合は、アプリケーションを再デプロイせずにモニター属性の変更やアプリケーションの更新が可能です。詳細は、「インストゥルメンテーション構成を動的に制御するためのデプロイメント・プランの使用」を参照してください。


WLSTを使用したメソッドのパフォーマンス統計への問合せ

MedRecを再デプロイした場合、インストゥルメントされたコードが実行されると、MethodInvocationStatisticsActionはメソッドのパフォーマンス統計のキャプチャを開始します。この項では、カスタム・モニターが有効なMedRec親アプリケーションをナビゲートすることで統計をすばやく簡単に生成する方法を示します。次に、WLSTオンラインを使用して統計を確認する方法を示します。

MedRecに構成されたカスタム・モニターを使用してメソッドのパフォーマンス統計をキャプチャし、WLSTを使用してその結果を問い合せるには、次の手順に従います。

  1. 『Oracle WebLogic Serverの紹介』のWebLogic Server APIのサンプルおよびサンプル・アプリケーションに関する項の説明に従い、MedRecアプリケーションを開始します。

    患者、管理者または医師としてログインし、数回の操作を行います。

  2. 次の例の手順に示すように、WLSTオンラインを呼び出し、WLDFInstrumentationRuntimeMBeanインスタンスにナビゲートします。

    1. 次のようにMedRecサーバーに接続します。

      wls:/offline> connect('weblogic','welcome1','localhost:7011')
      Connecting to t3://localhost:7011 with userid weblogic ...
      Successfully connected to Admin Server 'MedRecServer' that belongs to domain 'medrec'.
      
    2. cdコマンドを実行して、MedRecアプリケーションに関連するWLDFInstrumentationRuntimeMBeanインスタンスにナビゲートします。

      cd('serverRuntime:/WLDFRuntime/WLDFRuntime/WLDFInstrumentationRuntimes/medrec')
      Location changed to serverRuntime tree. This is a read-only tree with ServerRuntimeMBean as the root.
      For more help, use help(serverRuntime)
      
  3. WLDFInstrumentationRuntimeMBeanに対して次のメソッドを呼び出して、MethodInvocationStatisticsActionで収集された特定の値にアクセスします。

    public Object getMethodInvocationStatisticsData(String expr) throws ManagementException;
    

    WLSTをインタラクティブに使用すると、このメソッドにルックアップ式を渡すことができます。ルックアップ式では、表示する値の特定のサブセットを指定します。これらの値は、MethodInvocationStatisticsActionで作成されるマップ構造から取得されます。たとえば、次のWLSTコマンドは、MethodInvocationStatisticsActionでインストゥルメントされるすべてのメソッドの平均実行時間(ナノ秒単位)を戻します。

    cmo.getMethodInvocationStatisticsData("(com.bea%)(*)(?)(avg)")
    array(java.lang.Object,[3352.0, 3632.0, 145270.0, 4050.5, 8450.916666666666, 1798645.75, 
    583538.0, 3610515.0, 1.9541031E7, 1.2796319E7, 3.07897E8, 4470.0, 3073.0, 3073.0, 
    2.4644752E7, 3492.5, 1051530.0, 2794.0, 390552.3333333333, 3632.0, 2095.5, 189409.33333333334, 
    2607.6666666666665, 2793.6666666666665, 4749.333333333333, 5308.0, 65930.0, 3.3950405E7, 
    3353.0, 3911.5])
    

収集されたデータ値のセット全体を表示する場合、図B-4に示すように、大量の情報がWLSTコンソールに表示されることがあります。

図B-4 MethodInvocationStatisticsActionで収集されたすべてのデータ値の表示

図B-4の説明については以下を参照
「図B-4 MethodInvocationStatisticsActionで収集されたすべてのデータ値の表示」の説明

また、例B-1のように、MethodInvocationStatisticsを呼び出して、収集されたデータが読みやすくなるようにフォーマットするWLSTスクリプトを作成する方法もあります。

例B-1 WLSTを使用したMethodInvocationStatisticsの呼出しと結果の表示

import sys
 
def getPositionalArgument(pos, default):
  value=None
  try:
    value=sys.argv[pos]
  except:
    value=default
  return value
 
url = getPositionalArgument(1, "t3://localhost:7001")
user = getPositionalArgument(2, "weblogic")
password = getPositionalArgument(3, "welcome1")
appName = getPositionalArgument(4, "myapp")
 
connect(user,password,url)
serverRuntime()
cd('/WLDFRuntime/WLDFRuntime/WLDFInstrumentationRuntimes/' + appName)
 
print "# Class Method | Count | Min | Max | Average | Std-dev |"
stats=cmo.getMethodInvocationStatistics()
for className in stats.keySet():
      classMap=stats.get(className)
      for methodName in classMap.keySet():
        methodMap=classMap.get(methodName)
        for sig in methodMap.keySet():
          str= className + " " + methodName + "(" + sig + ")"
          sigMap=methodMap.get(sig)
          count=sigMap.get('count')
          min=sigMap.get('min')
          max=sigMap.get('max')
          avg=sigMap.get('avg')
          std_deviation=sigMap.get('std_deviation')
          print str, "|", count, "|", min, "|", max, "|", avg, "|", std_deviation, "|"

次に、例B-1に示すWLSTスクリプトで生成される出力を示します。

# Class Method | Count | Min | Max | Average | Std-dev |
jsp_servlet.__index _isStale() | 1 | 1378000 | 1378000 | 1378000.0 | 0.0 |
jsp_servlet.__index _getBytes(java.lang.String) | 3 | 1000 | 754000 | 252666.66666666666 | 354497.1399351795 |
jsp_servlet.__index _staticIsStale(weblogic.servlet.jsp.StaleChecker) | 1 | 861000 | 861000 | 861000.0 | 0.0 |
jsp_servlet.__index _jspService(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) | 2 | 70000 | 2113000 | 1091500.0 | 1021500.0 |
jsp_servlet.__index$MyMap containsKey(java.lang.Object) | 2 | 2000 | 101000 | 51500.0 | 49500.0 |
jsp_servlet.__index$MyMap containsValue(java.lang.Object) | 2 | 1000 | 2000 | 1500.0 | 500.0 |

MethodInvocationStatisticsActionデータを収集するためのハーベスタの構成

MethodInvocationStatisticsActionインスタンスで収集されたデータをハーベスタが集めるように構成するには、次の属性を使用してWLDFHarvesterBeanのインスタンスを構成する必要があります。

Name=weblogic.management.runtime.WLDFInstrumentationRuntimeMBean

スコープはインスタンスの構成によって選択されます。

属性の指定では、ハーベスタで収集するデータを定義します。マップの一連の要素には、次の表記法でアクセスできます。

MethodInvocationStatistics(className)(methodName)(methodParamSignature)
(metricName)

前述の表記法では、次のようになります。

  • classNameは、完全修飾Javaクラス名を表します。クラス名にはアスタリスク・ワイルドカード文字(*)を使用できます。

  • methodNameは指定のクラスから特定のメソッドを選択します。メソッド名にはアスタリスク・ワイルドカード文字(*)を使用できます。

  • methodParamSignatureはメソッドの入力引数の型をカンマ区切りのリストで表す文字列を表します。シグネチャの指定では、引数名を除いたJava型名のみを含めます。Java言語と同様に、シグネチャ内のパラメータの順序には意味があります。

    この要素は、アスタリスク・ワイルドカード文字(*)にも対応します。ワイルドカード文字は、指定のメソッドに入力引数の型のリスト全体を指定するために使用できます。アスタリスク・ワイルドカード文字(*)は、methodParamSignature式でワイルドカード文字が出現した後の位置のゼロ個以上の引数の型と一致します。

    また、疑問符のワイルドカード文字(?)も使用できます。これは、パラメータの型の順序付けられたリスト内の任意の位置で単一の引数の型に一致します。

    これらのワイルドカード文字はどちらも、式のどのような場所にも出現する可能性があります。「MethodInvocationStatisticsの例」を参照してください。

  • metricNameは、収集する統計を表します。このキー内でアスタリスク・ワイルドカード文字(*)を使用すると、サポートされているすべてのメトリックを収集できます。

MethodInvocationStatisticsの例

オーバーロードされた以下のメソッドを持つクラスを考えます。

package.com.foo;
public interface Bar {
  public void doIt();
  public void doIt(int a);
  public void doit(int a, String s)
  public void doIt(Stringa, int b);
  public void doIt(String a, String b);
  public void doIt(String[] a);
  public void doNothing();
  public void doNothing(com.foo.Baz);
}

表B-3は、MethodInvocationStatisticsActionを使用して、様々な統計を収集する例を示しています。

表B-3 MethodInvocationStatisticsActionの例

使用するMethodInvocationStatisticsActionインスタンスの構成 収集する内容
MethodInvocationStatistics(com.foo.Bar)(*)(*)(*)

com.Foo.Barに対する全メソッドのすべての統計。

MethodInvocationStatistics(com.foo.Bar)(doIt)()(*)

入力引数を持っていないdoIt()メソッドのすべての統計。

MethodInvocationStatistics(com.foo.Bar)(doIt)(*)(*)

doIt()メソッドのすべての統計。

MethodInvocationStatistics(com.foo.Bar)(doIt)(int, *)(*)

doIt(int)メソッドとdoIt(int, String)メソッドのすべての統計。

MethodInvocationStatistics(com.foo.Bar)(doIt)(String[])(*)

doIt(String[])メソッドのすべての統計。

配列パラメータは、型名の後に一対の角括弧([])を使用して指定します。スペース文字は、ハーベスタの場合、重要ではありません。

MethodInvocationStatistics(com.foo.Bar)(doIt)(String, ?)(*)

2つの入力パラメータを持ち、最初の引数の型がStringであるdoIt()メソッドのすべての統計。この例のクラスでは、このインスタンス構成は次のメソッドと一致します。

  • doIt(String, int)

  • doIt(String, String)

MethodInvocationStatistics(com.foo.Bar)(doNothing)(com.foo.Baz)(min,max)

com.foo.Baz型の単一の入力パラメータを持つdoNothing()メソッドのminおよびmaxの実行時間。



注意:

classNameの指定でワイルドカード文字を使用すると、パフォーマンスに悪影響を与える場合があります。


MethodInvocationStatisticsメトリックに基づく監視ルールの構成

監視ルールでMethodInvocationStatisticsメトリックを使用するには、前の項で説明した同じ構文を使用できます。ワイルドカード文字を使用しない重要な監視ルールをMetricName要素に作成するには、特定のメソッドにminmaxavgcountsumsum_of_squaresstd_deviationのいずれかの変数を指定します。

JMXによるデータの収集

JMXを使用してデータを収集する際にWLDFInstrumentationRuntimeMBeanに対してgetAttribute("MethodInvocationStatistics")メソッドを呼び出すと、サーバーのパフォーマンスに悪影響を与える場合があります。これは、インストゥルメントされたクラスによっては、ネストされたマップ構造に高価なシリアライゼーションを伴う大量のデータが含まれる場合があるためです。

JMXを使用してデータを収集する場合、getMethodInvocationStatisticsData(String)メソッドを使用することをお薦めします。

MethodMemoryAllocationStatisticsAction

このアクションは、メソッド呼出しのとき、スレッドにより割り当てられたバイト数を追跡するためにJRockit APIを使用します。メモリー割当てにあるメモリー内に統計が保存されます。ただし、このアクションによりインストゥルメンテーション・イベントは作成されません。

MethodMemoryAllocationStatisticsActionは、既存のMethodInvocationStatisticsActionとかなり似ています。ただし、MethodMemoryAllocationStatisticsActionで追跡される統計は、メソッド・コール内で割り当てられるメモリーに関連します。

MethodInvocationStatisticsActionは、インストゥルメンテーション・イベントを作成しません。JRockitが使用可能な場合、WLDFInstrumentationRuntimeMBeanを介して統計が使用できます。

各メソッド用に、次の統計が保持されます。

  • count

  • min

  • max

  • avg

  • sum

  • sum_of_squares

  • std_deviation