Oracle® Fusion Middleware Oracle WebLogic Server診断フレームワークの構成と使用 12cリリース1(12.1.1) B65916-02 |
|
前 |
次 |
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はStatelessアクションで、BeforeおよびAfterモニター・タイプに対応しています。
TraceActionは、プログラムの実行中に作用場所にトレース・イベントを生成します。以下の情報が生成されます。
タイムスタンプ
リクエストを一意に特定する診断コンテキストからのコンテキスト識別子
トランザクション識別子(可能な場合)
ユーザーID
アクション・タイプ(つまりTraceAction)
ドメイン
サーバー名
インストゥルメンテーション・スコープ名(たとえばアプリケーション名)
診断モニター名
モジュール名
コード内でアクションをコールした場所。場所情報には次が含まれます。
クラス名
メソッド名
メソッド・シグネチャ
行番号
スレッド名
診断コンテキストによって保持されるペイロード(存在する場合)
DisplayArgumentsActionはStatelessアクションで、BeforeおよびAfterモニター・タイプに対応しています。
DisplayArgumentsActionは、プログラムの実行中に作用場所にインストゥルメンテーション・イベントを生成し、メソッドの引数または戻り値をキャプチャします。
このアクションが実行されると、イベント・アーカイブにディスパッチされるインストゥルメンテーション・イベントが発生します。インストゥルメンテーション・イベントがBeforeモニターにアタッチされた場合は、ジョインポイントへの入力引数(たとえばメソッド引数)がキャプチャされます。インストゥルメンテーション・イベントがAfterモニターにアタッチされた場合は、ジョインポイントからの戻り値がキャプチャされます。イベントは、以下の情報を保持します。
タイムスタンプ
リクエストを一意に特定する診断コンテキストからのコンテキスト識別子
トランザクション識別子(可能な場合)
ユーザーID
アクション・タイプ(つまりDisplayArgumentsAction)
ドメイン
サーバー名
インストゥルメンテーション・スコープ名(たとえばアプリケーション名)
診断モニター名
モジュール名
コード内でアクションをコールした場所。場所情報には次が含まれます。
クラス名
メソッド名
メソッド・シグネチャ
行番号
スレッド名
診断コンテキストによって保持されるペイロード(存在する場合)
Beforeモニターにアタッチされたときの入力引数(存在する場合)
Afterモニターにアタッチされたときの戻り値(存在する場合)
TraceElapsedTimeActionはAroundアクションで、Aroundモニター・タイプに対応しています。
TraceElapsedTimeActionは2つのイベント(プログラム実行中の特定の場所の前と後)を生成します。
このアクションが実行されると、関連付けられたジョインポイントの実行前と実行後のタイムスタンプがキャプチャされます。そして、これらの差を計算することで経過時間が算出されます。このアクションでは、イベント・アーカイブにディスパッチされるインストゥルメンテーション・イベントが生成されます。経過時間は、イベント・ペイロードとして格納されます。イベントは、以下の情報を保持します。
タイムスタンプ
リクエストを一意に特定する診断コンテキストからのコンテキスト識別子
トランザクション識別子(可能な場合)
ユーザーID
アクション・タイプ(つまりTraceElapsedTimeAction)
ドメイン
サーバー名
インストゥルメンテーション・スコープ名(たとえばアプリケーション名)
診断モニター名
モジュール名
コード内でアクションをコールした場所。場所情報は次から構成されます。
クラス名
メソッド名
メソッド・シグネチャ
行番号
スレッド名
診断コンテキストによって保持されるペイロード(存在する場合)
ジョインポイントの処理にかかったナノ秒単位の時間(イベント・ペイロードとして)
TraceMemoryAllocationActionは、メソッド呼出しのとき、スレッドにより割り当てられたバイト数をトレースするためにJRockit APIを使用します。このアクションは、メソッド呼出し内に割り当てられたメモリーがトレースされる点を除けば、TraceElapsedTimeActionとよく似ています。
TraceMemoryAllocationActionのアクションは次のとおりです。
永続化されたインストゥルメンテーション・イベントを作成します。
委任とカスタム監視から使用できます。
StackDumpActionはStatelessアクションで、BeforeおよびAfterモニター・タイプに対応しています。
StackDumpActionは、プログラムの実行中に作用場所にインストゥルメンテーション・イベントを生成し、スタック・ダンプをキャプチャします。
このアクションが実行されると、イベント・アーカイブにディスパッチされるインストゥルメンテーション・イベントが生成されます。スタック・トレースは、イベント・ペイロードとしてキャプチャされます。イベントは、以下の情報を保持します。
タイムスタンプ
リクエストを一意に特定する診断コンテキストからのコンテキスト識別子
トランザクション識別子(可能な場合)
ユーザーID
アクション・タイプ(つまりStackDumpAction)
ドメイン
サーバー名
インストゥルメンテーション・スコープ名(たとえばアプリケーション名)
診断モニター名
モジュール名
コード内でアクションをコールした場所。場所情報は次から構成されます。
クラス名
メソッド名
メソッド・シグネチャ
行番号
スレッド名
診断コンテキストによって保持されるペイロード(存在する場合)
スタック・トレース(イベント・ペイロードとして)
ThreadDumpActionはStatelessアクションで、BeforeおよびAfterモニター・タイプに対応しています。
ThreadDumpActionは、プログラムの実行中に影響のある場所にインストゥルメンテーション・イベントを生成し、スレッド・ダンプをキャプチャします(基底のVMのサポート対象となっている場合)。JDK 1.6 (Oracle JRockitおよびSun)ではこのアクションをサポートします。
このアクションでは、イベント・アーカイブにディスパッチされるインストゥルメンテーション・イベントが生成されます。このアクションはJRockit JVMでのみ使用できます。他のJVMの場合は無視されます。スレッド・ダンプは、イベント・ペイロードとしてキャプチャされます。イベントは、以下の情報を保持します。
タイムスタンプ
リクエストを一意に特定する診断コンテキストからのコンテキスト識別子
トランザクション識別子(可能な場合)
ユーザーID
アクション・タイプ(つまりThreadDumpAction)
ドメイン
サーバー名
インストゥルメンテーション・スコープ名(たとえばアプリケーション名)
診断モニター名
モジュール名
コード内でアクションをコールした場所。場所情報は次から構成されます。
クラス名
メソッド名
メソッド・シグネチャ
行番号
スレッド名
診断コンテキストによって保持されるペイロード(存在する場合)
スレッド・ダンプ(イベント・ペイロードとして)
MethodInvocationStatisticsActionはAroundアクションで、Aroundモニター・タイプに対応しています。
MethodInvocationStatisticsActionは、呼出しごとにイベントをアーカイブに保存せずに、ジョインポイント前後のパフォーマンス・メトリックをメモリーにキャプチャします。統計が収集され、WLDFInstrumentationRuntimeMBeanで利用できます。収集された統計は、ハーベスタ・コンポーネントや監視と通知コンポーネントでも使用できます。これによって、インストゥルメンテーション・システムからのリクエスト情報と他のランタイムMBeanからのメトリック情報を結合可能な監視ルールを作成できます。
キャプチャが可能な統計の一部を次に示します。
呼出しの数
平均実行時間(ナノ秒単位)
観察対象実行時間の標準偏差
最小実行時間
最大実行時間
任意のスコープのWLDFInstrumentationRuntimeMBeanインスタンスは、MethodInvocationStatistics属性を使用して、構成されているAround診断モニターにアタッチされているMethodInvocationStatisticsActionインスタンスから収集したデータを公開します。図B-1に示すように、MethodInvocationStatistics属性には、Mapオブジェクトの階層が含まれます。
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を使用するカスタム・モニターでサンプル・アプリケーション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の紹介』のサンプル・コードとサンプル・アプリケーションに関する項を参照してください。 |
WebLogic Server 10.3以降では、カスタム・モニターの構成でアプリケーションのMETA-INFディレクトリにweblogic-diagnostics.xmlファイルを作成する必要がなくなりました。かわりに、MedRecサンプル・アプリケーションをインストゥルメントする次の手順に従い、管理コンソールから必要な手順をすべて実行できます。
管理コンソールの「ドメイン構造」ペインで「デプロイメント」を選択します。
「デプロイメントのサマリー」ページで、「制御」を選択し、「デプロイメント」表でmedrecをクリックします。
「medrecの設定」ページが表示されます。
「構成」→「インストゥルメンテーション」を選択します。
「このモジュールの診断監視」表で、「カスタム監視を追加」をクリックします。
「カスタム監視を追加」ページで、モニター名にMethodStatsMonitor
と入力します。簡単な説明をオプションで入力できます。
「場所のタイプ」選択ボックスで、「前後」を選択します。
「ポイントカット」テキスト・ボックスで、次のポイントカット式を入力します。
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で生成されるコードは無視されます。
ポイントカット式のテキスト・ボックスの下で「OK」をクリックします。
「デプロイメント・プランの保存」ページで、デプロイメント・プランの新しいパスを入力するか、デフォルトの場所を受け入れ、「OK」をクリックします。
「構成」→「インストゥルメンテーション」を選択して、「このモジュールの診断監視」表にリストされている新しいカスタム・モニターの名前MethodStatsMonitor
をクリックします。
「MethodStatsMonitorの設定」ページが表示されます。
図B-2に示すように、「アクション」表で、カスタム・モニターにMethodInvocationStatisticsActionを割り当てます。
図B-2 カスタム・モニターへのMethodInvocationStatisticsActionの選択
「MethodStatsMonitorの設定」ページの下部で「保存」をクリックします。
更新されたデプロイメント・プランをMedRecアプリケーションに適用します。
「ドメイン構造」ペインで、「デプロイメント」を選択します。
「デプロイメントのサマリー」ページで「制御」を選択し、図B-3に示すように、「デプロイメント」表でmedrecに隣接する選択ボックスをクリックします。
「更新」をクリックします。
「アプリケーション更新アシスタント」ページで、「このアプリケーションを次のデプロイメント・ファイルを使用して再デプロイします。」を選択します。
「次」、「終了」の順にクリックします。
MedRecアプリケーションが再デプロイされ、カスタム・モニターMethodStatsMonitor
がアクティブになります。
注意: Javaホットスワップが有効ではない場合、アプリケーションの構成に新しいポイントカットを追加するには、カスタム・モニターをアプリケーション・コードにウィービングできるようにアプリケーションを再デプロイする必要があります。(ただし、アプリケーションのモニター構成の大部分は再デプロイせずに変更できます。たとえば、カスタム・モニターの「アクション」、「プロパティ」、「仕分けフィルタの有効化」、「説明」の各属性(つまり、バイトコードのウィービングを必要としない属性)などを変更できます。 ただし、ホットスワップが有効な場合は、アプリケーションを再デプロイせずにモニター属性の変更やアプリケーションの更新が可能です。詳細は、「インストゥルメンテーション構成を動的に制御するためのデプロイメント・プランの使用」を参照してください。 |
MedRecを再デプロイした場合、インストゥルメントされたコードが実行されると、MethodInvocationStatisticsActionはメソッドのパフォーマンス統計のキャプチャを開始します。この項では、カスタム・モニターが有効なMedRec親アプリケーションをナビゲートすることで統計をすばやく簡単に生成する方法を示します。次に、WLSTオンラインを使用して統計を確認する方法を示します。
MedRecに構成されたカスタム・モニターを使用してメソッドのパフォーマンス統計をキャプチャし、WLSTを使用してその結果を問い合せるには、次の手順に従います。
『Oracle WebLogic Serverの紹介』のWebLogic Server APIのサンプルおよびサンプル・アプリケーションに関する項の説明に従い、MedRecアプリケーションを開始します。
患者、管理者または医師としてログインし、数回の操作を行います。
次の例の手順に示すように、WLSTオンラインを呼び出し、WLDFInstrumentationRuntimeMBeanインスタンスにナビゲートします。
次のように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'.
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)
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-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インスタンスで収集されたデータをハーベスタが集めるように構成するには、次の属性を使用して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)(*)(*)(*) |
|
MethodInvocationStatistics(com.foo.Bar)(doIt)()(*) |
入力引数を持っていない |
MethodInvocationStatistics(com.foo.Bar)(doIt)(*)(*) |
全 |
MethodInvocationStatistics(com.foo.Bar)(doIt)(int, *)(*) |
|
MethodInvocationStatistics(com.foo.Bar)(doIt)(String[])(*) |
配列パラメータは、型名の後に一対の角括弧( |
MethodInvocationStatistics(com.foo.Bar)(doIt)(String, ?)(*) |
2つの入力パラメータを持ち、最初の引数の型が
|
MethodInvocationStatistics(com.foo.Bar)(doNothing)(com.foo.Baz)(min,max) |
|
注意:
|
監視ルールでMethodInvocationStatisticsメトリックを使用するには、前の項で説明した同じ構文を使用できます。ワイルドカード文字を使用しない重要な監視ルールをMetricName
要素に作成するには、特定のメソッドにmin
、max
、avg
、count
、sum
、sum_of_squares
、std_deviation
のいずれかの変数を指定します。
JMXを使用してデータを収集する際にWLDFInstrumentationRuntimeMBeanに対してgetAttribute("MethodInvocationStatistics")
メソッドを呼び出すと、サーバーのパフォーマンスに悪影響を与える場合があります。これは、インストゥルメントされたクラスによっては、ネストされたマップ構造に高価なシリアライゼーションを伴う大量のデータが含まれる場合があるためです。
JMXを使用してデータを収集する場合、getMethodInvocationStatisticsData(String)
メソッドを使用することをお薦めします。
このアクションは、メソッド呼出しのとき、スレッドにより割り当てられたバイト数を追跡するためにJRockit APIを使用します。メモリー割当てにあるメモリー内に統計が保存されます。ただし、このアクションによりインストゥルメンテーション・イベントは作成されません。
MethodMemoryAllocationStatisticsActionは、既存のMethodInvocationStatisticsActionとかなり似ています。ただし、MethodMemoryAllocationStatisticsActionで追跡される統計は、メソッド・コール内で割り当てられるメモリーに関連します。
MethodInvocationStatisticsActionは、インストゥルメンテーション・イベントを作成しません。JRockitが使用可能な場合、WLDFInstrumentationRuntimeMBeanを介して統計が使用できます。
各メソッド用に、次の統計が保持されます。
count
min
max
avg
sum
sum_of_squares
std_deviation