Oracle® Fusion Middleware Oracle WebLogic Server JDBCの構成と管理 11gリリース1 (10.3.3) B60997-01 |
|
前 |
次 |
WebLogic ServerのこのリリースにはWebLogic診断フレームワークが含まれています。これは、WebLogic Serverプロセス内で実行され、標準のサーバー・ライフ・サイクルに参加する、モニターと診断のサービスです。このサービスを使用すると、実行中のサーバーおよびそのコンテナ内にデプロイされているアプリケーションによって生成された診断データを作成、収集、分析、アーカイブし、それらの診断データにアクセスできます。このデータを基に、サーバーおよびアプリケーションの実行時パフォーマンスを把握できます。また、フォルト発生時に、このデータを使用して、フォルトを隔離および診断できます。WebLogic JDBCは、このサービスを利用して、実行時の統計、ある一定の期間に渡ってのプロファイル情報、ロギング、およびデバッグの機能を拡張し、WebLogicドメインが円滑に実行され続けるよう支援します。
実行時の統計を使用すると、WebLogicドメインのデータ・ソースをモニターして、問題があるかどうかを確認することができます。問題があれば、プロファイリングによって、問題の原因となっているアプリケーションを判断できます。アプリケーションを絞り込んだら、JDBCデバッグ機能を使用して、そのアプリケーション内の問題点を突き止めます。
次の項では、JDBCオブジェクトのモニターについて詳細に説明します。
WebLogic診断フレームワークの詳細は、『Oracle WebLogic Server診断フレームワークの構成と使い方』を参照してください。
実行時の統計を表示すると、WebLogicドメインのデータ・ソースをモニターできます。
管理コンソールまたはJBCDataSourceRuntimeMBean
により、データ・ソースの実行時統計を表示できます。JDBCDataSourceRuntimeMBean
は、データ・ソースの現在の状態およびアクティブな平均接続数、現在のアクティブな接続数および最大アクティブ接続数など、データ・ソースの統計データの取得方法を提供します。詳細は、Oracle WebLogic Server MBeanリファレンスのJDBCDataSourceRuntimeMBeanに関する項を参照してください。
管理コンソールまたはJBCDataSourceRuntimeMBean
を介してPrepared Statementキャッシュの実行時統計を表示できます。詳細は、Oracle WebLogic Server MBeanリファレンスのJDBCDataSourceRuntimeMBeanに関する項を参照してください。
表示されている統計からWebLogic Serverドメインに問題があるとわかった場合は、任意のデータ・ソースを構成して、問題の原因を特定するのに役立つ、プロファイル情報を収集できます。収集されたプロファイル情報は、WLDFアーカイブの中のレコードに格納されます。後述するように、各フィールドには、プロファイル・タイプごとに別の情報が格納されます。
プロファイリングのためにデータ・ソースを構成するときに、プロファイル・データを収集する間隔(収集間隔
)を指定する必要があります。間隔を「0」に設定すると、データ収集は無効化されます。詳細は、『Oracle WebLogic Server診断フレームワークの構成と使い方』のメトリック収集ハーベスタの構成に関する項を参照してください。
このドキュメントで後述するように、データ・ソースおよびプリペアド文キャッシュについて、以下の情報のプロファイリングを選択することができます。
データ・ソース内の接続のプールからの接続を現在使用しているスレッドに関する情報を収集するには、接続使用状況のプロファイリングを有効化します。このプロファイル情報は、アプリケーションがデータ・ソースからの接続を取得できない原因を特定するのに役立ちます。
注意: デフォルトでは、接続使用状況のプロファイルを独自に有効化しても、接続を使用しているスレッドのスタック・トレースは得られません。この情報を得るには、接続の有効化に加えて、接続リークのプロファイルを有効化する必要があります。接続リークのプロファイルの詳細は、「接続リーク(PROFILE_TYPE_CONN_LEAK_STR)」を参照してください。 |
レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - 接続ID
User - 接続を使用しているスレッドのスタック・トレース
Timestamp - 接続がいつスレッドに渡されたかを示すタイムスタンプ
データ・ソースからの接続の予約を現在待機しているスレッドに関する情報を収集するには、待機中の接続予約のプロファイリングを有効化します。このプロファイル情報は、アプリケーションがデータ・ソースからの接続を取得できない、または接続を待機できない原因を特定するのに役立ちます。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - スレッドID
User - 接続を待機しているスレッドのスタック・トレース
Timestamp - スレッドがいつ接続を待機し始めたのかを示すタイムスタンプ
データ・ソースからの接続を予約しようとして接続の取得に失敗するスレッドに関する情報を収集するには、接続予約失敗のプロファイリングを有効化します。このプロファイル情報は、アプリケーションがデータ・ソースからの接続を、予約後も取得できない原因を特定するのに役立ちます。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - スレッドID
User - 接続を待機しているスレッドに加えて、予約リクエストが失敗したときに受け取られる例外のスタック・トレース
Timestamp - 予約リクエストがいつ失敗したのかを示すタイムスタンプ
データ・ソースからの接続を予約したスレッドと、リークした(接続のプールに正常に戻されなかった)接続の情報を収集するには、接続リークのプロファイリングを有効化します。このプロファイル情報は、JDBC接続を正しく閉じていないアプリケーションを特定するのに役立ちます。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - 接続ID
User - 接続を待機しているスレッドのスタック・トレース
Timestamp - 接続リークがいつ検出されたのかを示すタイムスタンプ
最後に接続を使用した以前のスレッドに関する情報を収集するには、接続の最終使用状況のプロファイリングを有効化します。この情報は、接続に対する後続のXA操作の失敗を招く保留中のトランザクションで発生した接続に関する問題をデバッグする際に役立ちます。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - スローされたXA例外のスタック・トレース
User - 接続を最後に使用したスレッドのスタック・トレース
Timestamp - 例外がいつスローされたのかを示すタイムスタンプ
別のスレッドによって以前に取得された接続を誤って使用するスレッドに関する情報を収集するには、マルチスレッド接続使用状況のプロファイリングを有効にします。この情報は、接続が複数のスレッドによって同時に使用されていることが原因ではないかと思われる問題をアプリケーションが報告した場合に有用です。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - 接続を使用していることが検出された別のスレッドのスタック・トレース
User - 接続を予約したスレッドのスタック・トレース
Timestamp - 複数のスレッドが接続を使用していることがいつ検出されたのかを示すタイムスタンプ
文キャッシュに追加されたプリペアド文と呼出し可能文、およびキャッシュされた文から発生したスレッドに関する情報を収集するには、文キャッシュ・エントリのプロファイリングを有効にします。この情報は、キャッシュがどのように使われているかを判断するのに役立ちます。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - 文の文字列表現
User - 文を使用しているスレッドのスタック・トレース
Timestamp - 文がいつキャッシュに追加されたかを示すタイムスタンプ
文キャッシュからのSQL文を現在実行しているスレッドに関する情報を収集するには、文の使用状況のプロファイリングを有効にします。この情報は、文がどのように使われているかを判断するのに役立ちます。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - 文を介して実行されているSQL文
User - 文を使用しているスレッドのスタック・トレース
Timestamp - 文が実行されている期間
プロファイル・データを収集したら、以下のサンプルで示すようなコードを使用して、そのデータにアクセスできます。サンプル中で太字で示されている箇所を、適切なプロファイル・タイプに置き換えます。コードの最初の部分では、収集されたプロファイル・データ(jdbcProfData
)が格納されるベクトル変数(dataV
)を定義します。コードの2番目の部分では、格納されたデータをベクトル変数から取得し、出力します。
} jdbcProfData = getData("EventsDataArchive", "TYPE LIKE '%" + JDBCLegalHelper.PROFILE_TYPE_CONN_USAGE_STR + "%'"); Vector dataV = new Vector(); for (int i = 0; i < jdbcProfData.length; i++) { if (jdbcProfData[i].getPoolName().equalsIgnoreCase (Data_Source_1)) dataV.add(jdbcProfData[i]); } System.out.println("records found for PROFILE_TYPE_CONN_USAGE_STR : " + dataV.size()); for (int a = 0; a < dataV.size(); a++) { System.out.println("ID : " + ((ProfileDataRecord) dataV.get(a)).getId()); System.out.println("PoolName : " + ((ProfileDataRecord) dataV.get(a)).getPoolName()); System.out.println("Time : " + ((ProfileDataRecord) dataV.get(a)).getTimestamp()); System.out.println("User : " + ((ProfileDataRecord) dataV.get(a)).getUser()); }
診断データにアクセスする別のメソッドとして、WebLogic診断フレームワーク(WLDF)のデータ・アクセッサ・コンポーネントの使用があります。詳細は、『Oracle WebLogic Server診断フレームワークの構成と使い方』のデータ・アクセッサで診断データへのアクセスを参照してください。
WebLogic Serverでは、JDBCドライバに対して呼び出されるメソッドのコールバックを提供しています。これらのコールバックは、実行されているメソッド、任意のスローされた例外、ドライバ・メソッドの実行に費やされた時間など、JDBCドライバの使用状況をモニターおよびプロファイリングするために使用できます。
コールバック機能を有効化するには、JDBCデータ・ソース記述子(モジュール)内のdriver-interceptor要素に対するコールバック・ハンドラの完全修飾パスを指定する必要があります。コールバック・ハンドラには、weblogic.jdbc.extensions.DriverInterceptorインタフェースが実装されている必要があります。JDBCドライバのコールバックが有効化されていると、WebLogic ServerはJDBCドライバ内の任意のメソッドの呼出し前と呼出し後に、登録されたコールバック・ハンドラのpreInvokeCallback()
、postInvokeExceptionCallback()
、またはpostInvokeCallback()
メソッドを呼び出します。
アプリケーションがJDBCドライバを呼び出すと、必ずそのドライバを実装したクラスにコールバックが送信されます。
特定のアプリケーションに問題があると突き止めたら、WebLogic Serverのデバッグ機能をアクティブ化して、アプリケーション内の特定の問題を探し当てることができます。
デバッグは、適切なServerDebug
構成属性を「true」
に設定することで有効化できます。オプションで、サーバーのStdoutSeverity
を「Debug」
に設定することもできます。
構成属性は、以下のいずれかの方法で変更できます。
コマンド・ラインで適切なプロパティを設定します。たとえば:
-Dweblogic.debug.DebugJDBCSQL=true -Dweblogic.log.StdoutSeverity="Debug"
この方法は静的なものであり、サーバーの起動時にのみ使用できます。
WebLogic Server 管理コンソールを使用して、デバッグ値を設定します。
管理コンソールのチェンジ・センターでロックして変更をクリックします(まだ行っていない場合) (『Oracle WebLogic Serverの紹介』のチェンジ・センターの使用に関する項を参照してください)。
管理コンソールの左ペインで、「環境」を展開して「サーバー」を選択します。
「サーバーの概要」ページで、デバッグを有効化または無効化するサーバーをクリックして、そのサーバーの設定ページを開きます。
「デバッグ」をクリックします。
「デフォルト」を展開します。
変更するデバッグ・スコープまたは属性のチェック・ボックスを選択します。
「有効化」 (または「無効化」)を選択して、チェックを入れたデバッグ・スコープまたは属性を有効化(または無効化)します。
管理コンソールのチェンジ・センターで「変更のアクティブ化」をクリックしてこれらの変更をアクティブ化します。
すべての変更がすぐに有効になるわけではありません - いくつかの変更を有効にするには、再起動する必要があります(『Oracle WebLogic Serverの紹介』のチェンジ・センターの使用に関する項を参照してください)。
この方法は動的なものであり、サーバーの実行中にデバッグを有効化するのに使用できます。
WebLogic Scripting Tool (WLST)を使用してデバッグ値を設定します。たとえば、次のコマンドでは、debug.py
というデバッグ値を設定するためのプログラムが実行されます。
java weblogic.WLST debug.py
debug.py programプログラムには、次のコードが含まれています。
user='user1' password='password' url='t3://localhost:7001' connect(user, password, url) edit() cd('Servers/myserver/ServerDebug/myserver') startEdit() set('DebugJDBCSQL','true') save() activate()
JavaからもWLSTを使用することができることに注意してください。デバッグ値の設定に使用されるJavaファイルの例を示します。
import weblogic.management.scripting.utils.WLSTInterpreter; import java.io.*; import weblogic.jndi.Environment; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; public class test { public static void main(String args[]) { try { WLSTInterpreter interpreter = null; String user="user1"; String pass="pw12ab"; String url ="t3://localhost:7001"; Environment env = new Environment(); env.setProviderUrl(url); env.setSecurityPrincipal(user); env.setSecurityCredentials(pass); Context ctx = env.getInitialContext(); interpreter = new WLSTInterpreter(); interpreter.exec ("connect('"+user+"','"+pass+"','"+url+"')"); interpreter.exec("edit()"); interpreter.exec("startEdit()"); interpreter.exec ("cd('Servers/myserver/ServerDebug/myserver')"); interpreter.exec("set('DebugJDBCSQL','true')"); interpreter.exec("save()"); interpreter.exec("activate()"); } catch (Exception e) { System.out.println("Exception "+e); } } }
WLSTの使用は動的な手法で、サーバーの実行中にデバッグを有効化するために使用できます。
コンソール、WLST、またはコマンド・ラインでデバッグ特性を変更すると、その内容がconfig.xml
ファイルに反映されます。例6-1を参照してください。
例6-1 JDBCのデバッグ・スタンザのサンプル
. . . <server> <name>myserver</name> <server-debug> <debug-scope> <name>weblogic.transaction</name> <enabled>true</enabled> </debug-scope> <debug-jdbcsql>true</debug-jdbcsql> </server-debug> </server> . . .
以下のconfig.xml
のサンプル(抜粋)に、トランザクション・デバッグのスコープ(複数のデバッグ属性)および1つのJDBC属性を示します。
java weblogic.diagnostics.debug.DebugScopeViewer
を使用するとDebugScope定義をツリー表示できます。
以下に示すJDBC用の登録済みデバッグ・スコープを有効化できます。
DebugJDBCSQL (スコープweblogic.jdbc.sql) - 引数と戻り値、スローされた例外など、呼び出されたすべてのJDBCメソッドに関する情報を出力します。
DebugJDBCConn (スコープweblogic.jdbc.connection) - データ・ソース内のすべての接続予約および解放の操作、ならびに接続を取得したり閉じたりするためのすべてのアプリケーション・リクエストを追跡します。
DebugJDBCRMI (スコープweblogic.jdbc.rmi) - JDBCSQLと同様に、ただしRMIレベルで機能します。これとJDBCSQLを有効にすると、クライアントから呼び出される各操作につき、2セットのデバッグ・メッセージが取得されます。
DebugJDBCInternal (スコープweblogic.jdbc.internal) - データ・ソース、接続環境、およびデータ・ソース・マネージャに関連するweblogic/jdbc/common/internalにおける低レベルのデバッグ。
DebugJDBCDriverLogging (スコープweblogic.jdbc.driverlogging) - JDBCドライバ・レベルでのロギングを有効化します(これはServerMBean JDBCLoggingEnabledおよびgetJDBCLogFileNameの代わりとなります)。Oracleについてドライバ・レベルでのトレースを取得するには、ojdbc14.jarではなくojdbc14_g.jarの使用が必要です。このデバッグ・スコープの場合、サーバー起動時にコマンド・ラインまたは構成によって一度オンにすることはできますが、(DriverManagerインタフェースがあるため)動的にオンまたはオフにすることはできません。
注意: Oracle WebLogic JDBC Spyは、アプリケーションによって発行されたJDBCコールに関する詳細情報を記録し、それらのコールをラップされたWebLogic Type4 JDBCドライバに渡します。ログ内の情報を使用して、アプリケーションでの問題をトラブルシューティングできます。WebLogic JDBC Spyの詳細は、『Oracle WebLogic Server Type4 JDBCドライバ』のWebLogic JDBC SpyによるJDBCコールのトラッキングに関する項を参照してください。 |