Oracle® Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの管理 12c (12.2.1) E70015-01 |
|
前 |
次 |
この章では、稼働中のサーバー、およびコンテナ内にデプロイされたアプリケーションで生成される診断データを作成、収集、分析、アーカイブする方法、およびそのデータにアクセスする方法について説明します。
このデータにより、サーバーおよびアプリケーションの実行時のパフォーマンスに関する指標が提供され、障害発生時に失敗を隔離して診断することができます。WebLogic JDBCは、このサービスを利用して、実行時の統計、ある一定の期間に渡ってのプロファイル情報、ロギングおよびデバッグの機能を拡張し、WebLogicドメインが円滑に実行され続けるよう支援します。
実行時の統計を使用すると、WebLogicドメインのデータ・ソースをモニターして、問題があるかどうか確認できます。問題がある場合、プロファイリングを使用して、問題の原因となっているアプリケーションを特定できます。アプリケーションを絞り込んだ後、JDBCデバッグ機能を使用して、そのアプリケーション内の問題点を突き止めることができます。
この章には次の項が含まれます:
実行時の統計を表示すると、WebLogicドメイン内のデータ・ソースをモニターできます。
データ・ソースの実行時の統計は、WebLogic Server管理コンソール(Oracle WebLogic Server管理コンソール・オンライン・ヘルプの「JDBCデータ・ソース: モニタリング: 統計」に関する項を参照)またはJBCDataSourceRuntimeMBean
を使用して表示できます。JDBCDataSourceRuntimeMBean
は、データ・ソースの現在の状態を取得するためのメソッド、およびアクティブな接続の平均数、アクティブな接続の現在の数、アクティブな接続の最大数など、データ・ソースに関する統計を取得するためのメソッドを提供しています。詳細は、Oracle WebLogic Server MBeanリファレンスの「JDBCDataSourceRuntimeMBean」を参照してください。
プリコンパイルされた文のキャッシュの実行時統計は、WebLogic Server管理コンソールまたはJBCDataSourceRuntimeMBean
を使用して表示できます。詳細は、Oracle WebLogic Server MBeanリファレンスの「JDBCDataSourceRuntimeMBean」を参照してください。
WebLogic Serverでは、イベントを記録するためにデータ・ソース・プロファイル・ログが使用されます。プロファイル・ログには次の利点があります。
ログ・ローテーション: 標準WebLogicロギング実装を使用して、古いデータを構成、ローテーションおよびリタイアできます。詳細は、Oracle WebLogic Server MBeanリファレンスの「DataSourceLogFileMBean」を参照してください。
データ・アクセシビリティ: 一般的なテキスト・エディタ、WLDF Data AccessorまたはWebLogic Server管理コンソールを使用できます。「診断データへのアクセス」を参照してください。
データ・ソース・プロファイリングのログの基本特性を次に示します。
すべてのデータ・ソース・プロファイル・タイプに対して単一のログ・ファイルが使用されます。各プロファイル・レコードに、フィルタ処理のためのプロファイル・タイプ名があります。「プロファイル・タイプ」を参照してください。
サーバー上のすべてのデータ・ソースに対して単一のログ・ファイルが使用されます。各プロファイル・レコードには、フィルタ処理のための修飾されたデータ・ソース名があります(該当する場合、application
@
module
@
component
で完全修飾されます)。Oracle WebLogic Server MBeanリファレンスの「DataSourceLogFileMBean」を参照してください。
WebLogicのロギング・サービスの詳細は、次を参照してください。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのデータ・ソース・プロファイル・ログの有効化および構成に関する項。
『Oracle WebLogic Serverログ・ファイルの構成とログ・メッセージのフィルタリング』のWebLogicロギング・サービスの理解に関する項。
確認中の統計において、WebLogic Serverドメインになんらかの問題があることが示された場合、データ・ソースを構成して、原因究明の手がかりとなるプロファイル情報を収集できます。収集されたプロファイル情報は、プロファイル・ログのレコードに格納されます。次の項で説明するように、各フィールドには、プロファイル タイプごとに異なる情報が格納されます。
プロファイリングのためにデータ・ソースを構成する場合、プロファイル・データを収集する間隔(収集間隔(秒)
)を指定する必要があります。間隔を0に設定すると、データ収集は無効化されます。Oracle WebLogic Server管理コンソール・オンライン・ヘルプのJDBCデータ・ソースの診断プロファイルの構成に関する項を参照してください。
この項のプロファイル・タイプごとに、「ユーザー」
情報で、接続が割り当てられ、プロファイリング対象の操作に関連するスレッドのスタック・トレースが提供されます。デフォルトでは、この情報の追跡で発生するオーバーヘッドのため、値は設定されません。この情報を取得するには、追跡するプロファイル・タイプに加えて、接続リークのプロファイリングを有効にする必要があります。接続リークのプロファイリングの詳細は、「接続リーク(WEBLOGIC.JDBC.CONN.LEAK)」を参照してください。
このドキュメントの次の項で説明するように、データ・ソースおよびプリコンパイルされた文のキャッシュについて、次の情報をプロファイリングすることを選択できます。
接続使用状況のプロファイリングを有効にすると、データ・ソース内の接続プールからの接続を現在使用しているスレッドについて情報が収集されます。このプロファイル情報の支援により、アプリケーションがデータ・ソースから接続を取得できない理由を特定できます。
レコードには、次の情報が格納されます。
PoolName: この接続が属するデータ・ソースの名前
ID: 接続ID
User: 接続を使用しているスレッドのスタック・トレース
Timestamp: 接続がスレッドにいつ割り当てられたか示すタイム・スタンプ
待機中の接続予約のプロファイリングを有効にすると、データ・ソースからの接続を予約するのを現在待機しているスレッドついて情報が収集されます。このプロファイル情報の支援により、アプリケーションがデータ・ソースから接続を取得できない理由、または接続を待機できない理由を特定できます。レコードには、次の情報が格納されます。
PoolName: この接続が属するデータ・ソースの名前
ID: スレッドID
User: 接続を待機しているスレッドのスタック・トレース
Timestamp: スレッドが接続をいつ待機し始めたか示すタイム・スタンプ
失敗した接続予約のプロファイリングを有効にすると、データ・ソースからの接続を予約しようとしたけれども、その接続を取得できなかったスレッドについて情報が収集されます。このプロファイル情報の支援により、アプリケーションが、接続を予約したにもかかわらず、その接続をデータ・ソースから取得できない理由を特定できます。レコードには、次の情報が格納されます。
PoolName: この接続が属するデータ・ソースの名前
ID: スレッドID
User: 接続を待機しているスレッド、および予約リクエストが失敗したときに受け取る例外のスタック・トレース
Timestamp: 予約リクエストがいつ失敗したか示すタイム・スタンプ
接続リークのプロファイリングを有効にすると、データ・ソースからの接続を予約し、その接続がリークした(接続プールに正常に戻されなかった)スレッドついて情報が収集されます。このプロファイル情報の支援により、JDBC接続を正しく閉じていないアプリケーションを特定できます。いずれかのプロファイル・タイプのユーザー・スタック・トレース情報を取得するには、接続リークのプロファイリングを有効にする必要があります。レコードには、次の情報が格納されます。
PoolName: この接続が属するデータ・ソースの名前
ID: 接続ID
User: 接続を待機しているスレッドのスタック・トレース
Timestamp: 接続リークがいつ検出されたか示すタイム・スタンプ
予約済の接続がリークしているとみなすまでの時間の長さを指定するには、次のいずれかを実行します。
Inactive Connection Timeout Seconds
を0 (ゼロ)より大きい値に設定します。WebLogicでは、JDBCプール接続が予約された場所のスタック・トレースが出力されます。Inactive Connection Timeout Seconds
の時間が経過した後、スタック・トレースが出力されます。
Connection Leak Timeout Seconds
を0
より大きい値に設定します。この値は、接続リークの診断プロファイリング・レコードをトリガーするまでにアプリケーションでJDBC接続を保持する時間(秒数)を指定します。0
に設定されている場合、タイムアウトは無効です。
接続の最終使用状況のプロファイリングを有効にすると、接続を最後に使用した前スレッドについて情報が収集されます。この情報は、保留中のトランザクションが原因で、接続で後続のXA操作が失敗した場合など、接続の問題をデバッグする場合に役立ちます。レコードには、次の情報が格納されます。
PoolName: この接続が属するデータ・ソースの名前
ID: スローされたXA例外のスタック・トレース
User: 接続を最後に使用したスレッドのスタック・トレース
Timestamp: 例外がいつスローされたか示すタイム・スタンプ
マルチスレッド接続使用状況のプロファイリングを有効にすると、異なるスレッドにより以前に取得された接続を不正に使用しているスレッドについて情報が収集されます。アプリケーションが問題を報告し、その問題の原因が、複数のスレッドが1つの接続を同時に使用していることと考えられる場合、この情報が役立ちます。レコードには、次の情報が格納されます。
PoolName: この接続が属するデータ・ソースの名前
ID: 接続を使用していることが検出された他のスレッドのスタック・トレース
User: 接続を予約したスレッドのスタック・トレース
Timestamp: 複数のスレッドによる接続の使用がいつ検出されたか示すタイム・スタンプ
文キャッシュ・エントリのプロファイリングを有効にすると、文キャッシュに追加されたプリコンパイルされた文と呼出し可能文について、およびキャッシュされた文から発生したスレッドについて情報が収集されます。この情報の支援により、キャッシュがどのように使用されているか特定できます。レコードには、次の情報が格納されます。
PoolName: この接続が属するデータ・ソースの名前
ID: 文の文字列表現
User: 文を使用しているスレッドのスタック・トレース
Timestamp: 文がキャッシュにいつ追加されたか示すタイム・スタンプ
文使用状況のプロファイリングを有効にすると、文キャッシュ内のSQL文を現在実行しているスレッドについて情報が収集されます。この情報の支援により、文がどのように使用されているか特定できます。レコードには、次の情報が格納されます。
PoolName: この接続が属するデータ・ソースの名前
ID: 文を通じて実行されているSQL文
User: 文を使用しているスレッドのスタック・トレース
Timestamp: 文の実行期間
接続アンラップのプロファイリングを有効にすると、getVendorObject
WebLogic拡張APIまたはJDBC 4.0のunwrap
メソッドを使用して基になるJDBC接続にアクセスするアプリケーション・コンポーネントについてプロファイル情報が収集されます。レコードには、次の情報が格納されます。
PoolName: この接続が属するデータ・ソースの名前
ID: オブジェクトがアンラップされた場所のスタック・トレース
User: オブジェクトをアンラップしているスレッドのスタック・トレース
Timestamp: オブジェクトがいつアンラップされたか示すタイム・スタンプ
JDBCオブジェクト使用状況のプロファイリングを有効にすると、close()
メソッドが呼び出された後にアクセスされたJDBCオブジェクト(Connection、StatementまたはResultSet)についてプロファイル情報が収集されます。この情報は、最初にオブジェクトをクローズしたスレッドと、クローズ済のオブジェクトにアクセスしようとしたスレッドの両方を特定するために役立ちます。レコードには、次の情報が格納されます。
PoolName: この接続が属するデータ・ソースの名前
ID: オブジェクトのクローズを試みている現在のスレッドのスタック・トレース
User: オブジェクトをクローズしたスレッドとクローズが実行された場所のスタック・トレース
Timestamp: オブジェクトがいつクローズされたか示すタイム・スタンプ
JDBCローカル・トランザクション接続リークのプロファイリングを有効にすると、ローカル・トランザクションのリークが発生するアプリケーション・コンポーネント(起動するがトランザクションをコミットまたはロールバックしない)についてプロファイル情報が収集されます。ログ・レコードには、接続を解放しているスレッドに関するコール・スタックおよび詳細が含まれます。レコードには、次の情報が含まれます。
PoolName: この接続が属するデータ・ソースの名前
ID: 接続を解放しているスレッドのスタック・トレース
User: 予約スレッドのスタック・トレースと、接続がクローズされたときのスレッドのスタック・トレース
Timestamp: 接続がいつクローズされたか示すタイム・スタンプ
標準的な出力ログからの文使用状況(WEBLOGIC.JDBC.STMT.USAGE)のプロファイル情報レコードの例を、次に示します。
####<JDBC Data Source-0> <WEBLOGIC.JDBC.STMT.USAGE> <0> <java.lang.Exception at . . . weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run( ContainerSupportProviderImpl.java:254) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295) at weblogic.work.ExecuteThread.run(ExecuteThread.java:254) > <select 1 from dual>
プロファイル・ログの各コンポーネントは、カッコ(<および>)で囲まれています。
プール名: JDBC Data Source-0
プロファイル・タイプ: WEBLOGIC.JDBC.STMT.USAGE
タイムスタンプ: 0
(ミリ秒)
ユーザー: java.lang.Exception at . . . at weblogic.work.ExecuteThread.run(ExecuteThread.java:254
ID: select 1 from dual
次の方法のいずれかを使用して、診断データにアクセスできます。
WebLogic Server管理コンソール。次の項を参照してください。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのログの表示および構成に関する項。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのJDBCデータ・ソースの統計のモニターに関する項。
WebLogic診断フレームワーク(WLDF)のData Accessorコンポーネント。『Oracle WebLogic Server診断フレームワークの構成と使用』のData Accessorによる診断データへのアクセスに関する項。
テキスト・エディタを使用して情報を手動で表示。
データ・ソースのプロファイリングを実行する場合、デフォルトの収集時間は300秒であるため、データをただちに表示できない場合があります。結果をより適切に視覚化するために、収集時間を小さい値(たとえば、5秒)に設定する必要がある場合があります。すべての接続を参照するには、診断イメージを取得します。スタック・トレースを参照するには、リークのプロファイリングを有効にします。
注意: この機能は、WebLogic Server 10.3.6.0では非推奨であり、今後のリリースでは削除される可能性があります。 |
WebLogic Serverは、JDBCドライバでコールされるメソッドのコールバックを提供しています。これらのコールバックを使用して、実行中のメソッド、スローされた例外、ドライバ・メソッドの実行に使用された時間など、JDBCドライバの使用状況をモニターおよびプロファイリングできます。
コールバック機能を有効にするには、JDBCデータ・ソース記述子(モジュール)内のdriver-interceptor要素のためのコールバック・ハンドラの完全修飾パスを指定します。コールバック・ハンドラには、weblogic.jdbc.extensions.DriverInterceptor
インタフェースが実装されている必要があります。JDBCドライバのコールバックを有効にすると、JDBCドライバ内のメソッドが呼び出される前、および呼び出された後に、WebLogic Serverにより、登録されているコールバック・ハンドラのpreInvokeCallback()
、postInvokeExceptionCallback()
およびpostInvokeCallback()
メソッドがコールされます。
アプリケーションによりJDBCドライバがコールされると、必ずそのドライバを実装したクラスにコールバックが送信されます。
特定のアプリケーションに問題があることを突き止めた後、WebLogic Serverのデバッグ機能をアクティブ化して、アプリケーション内の特定の問題を探し当てることができます。
適切なServerDebug
構成属性をtrue
に設定することで、デバッグを有効化できます。必要に応じて、サーバーのStdoutSeverity
をDebug
に設定することもできます。
次のいずれかの方法で構成属性を変更できます。
コマンド行で適切なプロパティを設定します。次に例を示します。
-Dweblogic.debug.DebugJDBCSQL=true -Dweblogic.log.StdoutSeverity="Debug"
この方法は静的であり、サーバーの起動時にのみ使用できます。
WebLogic Server管理コンソールを使用して、デバッグ値を設定します。
WebLogic Server管理コンソールの「チェンジ・センター」で「ロックして編集」をクリックしていない場合は、これを行います(『Oracle WebLogic Serverの理解』のチェンジ・センターの使用に関する項を参照)。
コンソールの左ペインで、「環境」を展開して「サーバー」を選択します。
「サーバーのサマリー」ページで、デバッグを有効化または無効化するサーバーをクリックして、そのサーバーの設定ページを開きます。
「デバッグ」をクリックします。
「デフォルト」を展開します。
変更するデバッグ・スコープまたは属性のチェック・ボックスを選択します。
「有効化」を選択して、選択したデバッグ・スコープまたは属性を有効化します(または「無効化」を選択して無効化します)。
これらの変更を有効にするために、WebLogic Server管理コンソールの「チェンジ・センター」で「変更のアクティブ化」をクリックします。
すべての変更が即座に有効になるわけではありません。再起動が必要なものもあります(『Oracle WebLogic Serverの理解』のチェンジ・センターの使用に関する項を参照)。
この方法は動的であり、サーバーの実行中にデバッグを有効化するのに使用できます。
WebLogic Scripting Tool (WLST)を使用して、デバッグ値を設定します。たとえば、次のコマンドでは、debug.py
というデバッグ値を設定するためのプログラムが実行されます。
java weblogic.WLST debug.py
debug.pyプログラムには、次のコードが含まれています。
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の使用は動的な手法で、サーバーの実行中にデバッグを有効化するために使用できます。
JDBCの登録済デバッグ範囲は、次のとおりです。
DebugJDBCSQL(スコープweblogic.jdbc.sql): 引数と戻り値、スローされた例外など、呼び出されたすべてのJDBCメソッドに関する情報を出力します。
DebugJDBCConn(スコープweblogic.jdbc.connection): データ・ソースのすべての接続予約および解放操作、および接続を取得または閉じるためのすべてのアプリケーション・リクエストを追跡します。
DebugJDBCONS(スコープweblogic.jdbc.rac): 低レベルのONSデバッグを追跡します。
DebugJDBCRAC(スコープweblogic.jdbc.rac): Oracle RACデバッグを追跡します。
DebugJDBCUCP(スコープweblogic.jdbc.rac): 低レベルのUCPデバッグを追跡します。
DebugJDBCReplay(スコープweblogic.jdbc.rac): リプレイ・デバッグを追跡します。
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のドライバ・レベル・トレースを取得するには、ojdbc6.jarのかわりにojdbc6_g.jarを使用する必要があります。このデバッグ・スコープでは、ロギングを、サーバー起動時にコマンド行または構成を通じて一度有効化できますが、(DriverManagerインタフェースがあるため)動的に有効化または無効化できません。
DebugJTAJDBC(スコープweblogic.jdbc.transaction): トランザクション・デバッグを追跡します。
次の項では、UCP/ONSのデバッグの設定方法について説明します。
UCPのデバッグは、次を使用して直接設定します。
oracle.ucp.level = FINEST; oracle.ucp.jdbc.PoolDataSource = WARNING;
ONSデバッグを有効化するには、Java Util Loggingを構成する必要があります。これを行うには、コマンド行で次のプロパティを設定します。
-Djava.util.logging.config.file=configfile
-Doracle.ons.debug=true
このコマンドで、configfile
は、ログ出力のフォーマットとロギング・レベルを制御するために標準のJDKロギングで使用される構成プロパティ・ファイル・プロパティのパスとファイル名です。configfile
に次の行を含める必要があります。
oracle.ons.level=FINEST
詳細は、Java Platform Standard Edition 7 API仕様のjava.util.loggingに関する項を参照してください。