WebLogic ストア アンド フォワードのコンフィグレーションと管理

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

WebLogic SAF のトラブルシューティング

WebLogic Server のこのリリースには WebLogic 診断サービスが含まれています。これは、WebLogic Server プロセス内で実行され、標準のサーバ ライフ サイクルに参加する、モニタと診断のサービスです。このサービスを使用すると、実行中のサーバおよびそのコンテナ内にデプロイされているアプリケーションによって生成された診断データを作成、収集、分析、アーカイブし、それらの診断データにアクセスできます。このデータを基に、サーバおよびアプリケーションの実行時パフォーマンスを把握できます。また、障害発生時に、このデータを使用して、障害を隔離および診断できます。WebLogic SAF は、このサービスを利用して、実行時の統計、SAF インポート済みキューおよびトピックに送信された通知、JMS メッセージのメッセージ ライフサイクル ロギング、およびデバッグの機能を拡張し、WebLogic ドメインが円滑に実行され続けるよう支援します。

SAF エージェントの統計のモニタについては、「SAF エージェントのモニタ」を参照してください。

以下の節では、WebLogic SAF サービスのトラブルシューティングの方法について説明します。

 


WebLogic SAF のデバッグ

特定のアプリケーションに問題があると突き止めたら、WebLogic Server のデバッグ機能をアクティブ化して、アプリケーション内の特定の問題を探し当てることができます。

デバッグの有効化

デバッグは、適切な ServerDebug コンフィグレーション属性を true に設定することで有効化できます。必要に応じて、サーバの StdoutSeverityDebug に設定することもできます。

コンフィグレーション属性は、以下のいずれかの方法で変更できます。

コマンドラインを使用してデバッグを有効化する

コマンドラインで適切なプロパティを設定します。次に例を示します。

-Dweblogic.debug.DebugSAFSendingAgent=true 
-Dweblogic.log.StdoutSeverity="Debug"

この方法は静的なものであり、サーバの起動時にのみ使用できます。

WebLogic Server Administration Console を使用してデバッグを有効化する

WebLogic Server Administration Console を使用して、デバッグ値を設定します。

  1. まだ行っていない場合、Administration Console のチェンジ センタで [ロックして編集] をクリックします (「チェンジ センタの使用」を参照)。
  2. Administration Console の左ペインで、[環境] を展開して [サーバ] を選択します。
  3. [サーバの概要] ページで、デバッグを有効化または無効化するサーバをクリックして、そのサーバの設定ページを開きます。
  4. [デバッグ] をクリックします。
  5. [デフォルト] を展開します。
  6. 変更するデバッグ スコープまたは属性のチェック ボックスを選択します。SAF のデバッグの場合であれば、[DebugMessaging] チェック ボックスを選択します。
  7. [有効化](または [無効化]) を選択して、チェックを入れたデバッグ スコープまたは属性を有効化 (または無効化) します。
  8. Administration Console のチェンジ センタで [変更のアクティブ化] をクリックしてこれらの変更をアクティブ化します。
    すべての変更が即座に有効になるわけではありません。再起動が必要な場合もあります (「チェンジ センタの使用」を参照)。
  9. この方法は動的なものであり、サーバの実行中にデバッグを有効化するのに使用できます。

WebLogic Scripting Tool を使用してデバッグを有効化する

WebLogic Scripting Tool (WLST) を使用してデバッグ値を設定します。たとえば、次のコマンドでは、debug.py というデバッグ値を設定するためのプログラムが実行されます。

   java weblogic.WLST debug.py

メイン スコープである weblogic は表示されません。saf は、weblogic のサブ スコープです。なお、DebugSAFSendingAgent の完全修飾の DebugScopemessaging.saf.admin です。

debug.py program プログラムには、以下のコードが含まれています。

user='user1'
password='password'
url='t3://localhost:7001'
connect(user, password, url)
edit()
cd('Servers/myserver/ServerDebug/myserver')
startEdit()
set('DebugSAFSendingAgent','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('DebugSAFSendingAgent','true')");
interpreter.exec("save()");
interpreter.exec("activate()");

} catch (Exception e) {
System.out.println("Exception "+e);
}
}
}

WLST の使用は動的な手法で、サーバの実行中にデバッグを有効化するために使用できます。

config.xml ファイルの変更内容

コンソール、WLST、またはコマンドラインでデバッグ特性を変更すると、その内容が config.xml ファイルに反映されます。

次に示す config.xml のサンプルの抜粋に、トランザクション デバッグのスコープ (複数のデバッグ属性) と単一の SAF 属性を示します。

コード リスト 5-1 SAF のデバッグ スタンザのサンプル
<server>
<name>myserver</name>
<server-debug>
<debug-scope>
<name>weblogic.transaction</name>
<enabled>true</enabled>
</debug-scope>
<debug-saf-sending-agent>true</debug-saf-sendingagent>
</server-debug>
</server>

SAF のデバッグ スコープ

java weblogic.diagnostics.debug.DebugScopeViewer を使うと DebugScope 定義をツリー表示できます。

以下に示す WebLogic SAF 用の登録済みデバッグ スコープを有効化できます。

要求の仕分け

これ以外のデバッグ方法は、SAF サービスを介して個々の (通常は「仕分けされた」) アプリケーション要求のフローをトレースすることです。詳細については、『WebLogic 診断フレームワークのコンフィグレーションと使い方』の「DyeInjection モニタを介した仕分けベクトルのコンフィグレーション」を参照してください。

 


JMS メッセージの SAF メッセージ ライフ サイクルのロギング

メッセージ ライフ サイクルは、JMS メッセージが SAF エージェントによって格納されてから、最終的にリモートの JMS 送り先に転送されるまでに発生するイベントを外側から見た概念です。メッセージ ライフ サイクルのロギングを利用することで、格納および転送された JMS メッセージの存在やステータスを SAF エージェントから見た情報に容易にアクセスできます。各メッセージ ログには、メッセージの格納、転送、期限切れなどの基本的なライフ サイクル イベントについての情報が含まれます。WebLogic ロギング サービス全般の詳細については、『ログ ファイルのコンフィグレーションとログ メッセージのフィルタ処理』の「WebLogic ロギング サービスについて」を参照してください。

SAF メッセージ ロギングは、SAF エージェントを作成するとデフォルトで有効になります。ただし、この SAF エージェントに対象指定する JMS モジュールの SAF インポート済み送り先では、SAF メッセージ ロギングを明示的に有効にする必要があります。ロギングは、長期間にわたって継続的に発生します。また、SAF エージェントがデプロイされている場合にリアルタイム モードで使用したり、SAF エージェントが停止している場合にオフライン形式で使用したりできます。SAF メッセージ ロギングのコンフィグレーションについては、以下を参照してください。

SAF メッセージ ライフ サイクルのイベント

SAF インポート済みキューまたはトピックの SAF メッセージ ライフ サイクルのロギングを有効にすると、メッセージが基本的なメッセージ ライフ サイクル イベントに対応する条件を満たすたびに、SAF エージェントのメッセージ ログ ファイルにレコードが追加されます。SAF メッセージのログ エントリは、以下のライフ サイクル イベントによってトリガされます。

メッセージ ログの場所

メッセージ ログは、ドメイン ディレクトリ内の次の場所に格納されます。

USER_DOMAIN\servers\servername\logs\safagents\saf_agent_name\jms\jms.messages.log

USER_DOMAIN はドメインのルート ディレクトリ (通常は c:\bea\user_projects\domains\USER_DOMAIN) です。これは、WebLogic Server プログラム ファイルが格納されるディレクトリ (通常は c:\bea\wlserver_10.0) に対応するディレクトリです。

SAF メッセージ ロギングの有効化

SAF キューおよび SAF トピックの SAF メッセージ ロギングは、WebLogic Server Administration Console を使用して有効にしたり無効にしたりできます。詳細については、以下を参照してください。

WebLogic Java Management Extensions (JMX) を使用すると、SAF メッセージ ログを管理するための SAFAgentRuntimeMBean および SAFAgentRuntimeMBean の MBean にアクセスできます。詳細については、『JMX によるカスタム管理ユーティリティの開発』の「WebLogic Server サブシステム MBean の概要」を参照してください。

SAF メッセージ ロギングを有効にする際は、メッセージ ヘッダ フィールド、システム定義のメッセージ プロパティ、およびユーザ定義のプロパティのそれぞれについて、ログ エントリにそのすべてを含めるか一部のみを含めるかを指定できます。また、メッセージの本文を含めるかどうかも選択できます。メッセージ ヘッダおよびプロパティの詳細については、『WebLogic JMS プログラマーズ ガイド』の「MessageProducer と MessageConsumer」を参照してください。

SAF メッセージ ログの内容

ログに追加される各レコードには、メッセージに関する基本的な情報 (メッセージ ID、メッセージの件名の相関 ID など) が含まれます。SAF エージェントをコンフィグレーションして、メッセージの種類やユーザ プロパティなどの追加情報を含めることもできます。

SAF メッセージ ログ レコードのフォーマット

特に注記のない限り、JMS メッセージの SAF メッセージ ライフ サイクル ログに追加されるすべてのレコードには、以下の情報が以下に列挙した順序で記録されます。

サンプル ログ ファイル レコード

以下に示すサンプル ログ ファイル レコードで、各メッセージ ライフ サイクル イベントでログ ファイルに記録される情報の種類を示します。各レコードは固定長ですが、イベントとの関連性やレコード内の各フィールドに有効な値が存在するかどうかに応じて含まれる情報が異なります。ログ ファイル レコードの構文は次のとおりです。

####<date_and_time_stamp> <transaction_id> <WLS_diagnostic_context> <date_in_milliseconds> <date_in_nanoseconds> <JMS_message_id> <JMS_correlation_id> <JMS_destination_name> <life_cycle_event_name> <JMS_user_name> <consumer_identifier> <JMS_message_content> <JMS_message_selector>
注意 : ログ ファイルに JMS メッセージのコンテンツを含めることを選択する場合は、メッセージのコンテンツ内のすべての左向きの山括弧 (<) と右向きの山括弧 (>) がエスケープされる点に注意してください。ログ ファイルでは、左向きの山括弧の代わりに "<"、右向きの山括弧の代わりに ">" が表示されます。

メッセージ格納イベント

####<Nov 3, 2005 11:11:02 AM EST> <> <> <1131034262637> <391826> <ID:<864239.1131034262172.0>> <> <SenderSafmodule!safDestinations2!xsafQ2@SendingAgent@D1S1> <Stored> <system> <> <&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;mes:WLJMSMessage xmlns:mes="http://www.bea.com/WLS/JMS/Message"&gt;&lt;mes:Header&gt;&lt;mes:JMSDeliveryMode&gt;NON_PERSISTENT&lt;/mes:JMSDeliveryMode&gt;&lt;mes:JMSExpiration&gt;0&lt;/mes:JMSExpiration&gt;&lt;mes:JMSPriority&gt;5&lt;/mes:JMSPriority&gt;&lt;mes:JMSRedelivered&gt;false&lt;/mes:JMSRedelivered&gt;&lt;mes:JMSTimestamp&gt;1131034262172&lt;/mes:JMSTimestamp&gt;&lt;mes:Properties/&gt;&lt;/mes:Header&gt;&lt;mes:Body&gt;&lt;mes:Text&gt;EndPointExpireAllWithMessageForward(NP):0&lt;/mes:Text&gt;&lt;/mes:Body&gt;&lt;/mes:WLJMSMessage&gt;> <>

メッセージ転送イベント

####<Nov 3, 2005 11:11:30 AM EST> <> <> <1131034290391> <277193> <ID:<864239.1131034288312.0>> <> <SenderSafmodule!safDestinations3!safErrorQueue@SendingAgent@D1S1> <Forwarded> <<WLS Kernel>> <> <&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;mes:WLJMSMessage xmlns:mes="http://www.bea.com/WLS/JMS/Message"&gt;&lt;mes:Header&gt;&lt;mes:JMSDeliveryMode&gt;NON_PERSISTENT&lt;/mes:JMSDeliveryMode&gt;&lt;mes:JMSExpiration&gt;0&lt;/mes:JMSExpiration&gt;&lt;mes:JMSPriority&gt;5&lt;/mes:JMSPriority&gt;&lt;mes:JMSRedelivered&gt;false&lt;/mes:JMSRedelivered&gt;&lt;mes:JMSTimestamp&gt;1131034288312&lt;/mes:JMSTimestamp&gt;&lt;mes:Properties/&gt;&lt;/mes:Header&gt;&lt;mes:Body&gt;&lt;mes:Text&gt;EndPointExpireAllWithMessageRedirect(NP):0&lt;/mes:Text&gt;&lt;/mes:Body&gt;&lt;/mes:WLJMSMessage&gt;> <>

メッセージ期限切れイベント

####<Nov 3, 2005 1:04:25 PM EST> <> <> <1131041065929> <42424> <ID:<130865.1131041065828.0>> <> <udd-saf!safDestinations!safRemoteQueue@SendingAgent@D1C1S1> <Expired> <<WLS Kernel>> <> <&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;mes:WLJMSMessage xmlns:mes="http://www.bea.com/WLS/JMS/Message"&gt;&lt;mes:Header&gt;&lt;mes:JMSDeliveryMode&gt;PERSISTENT&lt;/mes:JMSDeliveryMode&gt;&lt;mes:JMSExpiration&gt;1131041065848&lt;/mes:JMSExpiration&gt;&lt;mes:JMSPriority&gt;7&lt;/mes:JMSPriority&gt;&lt;mes:JMSRedelivered&gt;false&lt;/mes:JMSRedelivered&gt;&lt;mes:JMSTimestamp&gt;1131041065828&lt;/mes:JMSTimestamp&gt;&lt;mes:Properties/&gt;&lt;/mes:Header&gt;&lt;mes:Body&gt;&lt;mes:Text&gt;testSAFLogging_Expired&lt;/mes:Text&gt;&lt;/mes:Body&gt;&lt;/mes:WLJMSMessage&gt;> <>

メッセージ削除イベント

####<Nov 3, 2005 11:11:08 AM EST> <> <> <1131034268206> <803337> <ID:<864239.1131034262172.0>> <> <SenderSafmodule!safDestinations2!xsafQ2@SendingAgent@D1S1> <Removed> <<WLS Kernel>> <> <&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;mes:WLJMSMessage xmlns:mes="http://www.bea.com/WLS/JMS/Message"&gt;&lt;mes:Header&gt;&lt;mes:JMSDeliveryMode&gt;NON_PERSISTENT&lt;/mes:JMSDeliveryMode&gt;&lt;mes:JMSExpiration&gt;0&lt;/mes:JMSExpiration&gt;&lt;mes:JMSPriority&gt;5&lt;/mes:JMSPriority&gt;&lt;mes:JMSRedelivered&gt;false&lt;/mes:JMSRedelivered&gt;&lt;mes:JMSTimestamp&gt;1131034262172&lt;/mes:JMSTimestamp&gt;&lt;mes:Properties/&gt;&lt;/mes:Header&gt;&lt;mes:Body&gt;&lt;mes:Text&gt;EndPointExpireAllWithMessageForward(NP):0&lt;/mes:Text&gt;&lt;/mes:Body&gt;&lt;/mes:WLJMSMessage&gt;> <>

SAF エージェント ログ ファイルの管理

SAF エージェントを作成したら、古いログ メッセージを別のファイルに移動 (ローテーション) するための条件をコンフィグレーションできます。また、ログ ファイルのデフォルト名を変更することも可能です。

メッセージ ログ ファイルのローテーション

古いログ メッセージから新しいファイルへのローテーションは、ファイルが特定のサイズになったときに実施したり、指定した時間間隔で実施したりできます。また、古いログ メッセージのローテーションを実施しないことも選択できます。この場合は、すべてのメッセージが単一のファイルに蓄積され、ファイル サイズが大きくなり過ぎたときにはその中身を削除する必要があります。

ログ ファイルが特定のサイズに達したときに古いメッセージをローテーションすることを選択した場合は、最小限のファイル サイズを指定する必要があります。ログ ファイルが指定の最小サイズに到達すると、サーバが次回ファイル サイズをチェックする際に、現在のログ ファイルの名前が変更され、それ以降のメッセージを保存するための新規ログ ファイルが作成されます。

定期的な間隔で古いメッセージをローテーションすることを選択した場合は、最初の新しいログ ファイルが作成された時間と、そのファイルの名前が変更されて置換されるまでの時間間隔を指定する必要があります。

SAF エージェントのログ ファイルのローテーションの設定については、Administration Console オンライン ヘルプの「SAF エージェントの JMS メッセージのログ ローテーションのコンフィグレーション」を参照してください。

メッセージ ログ ファイル名の変更

ローテーションされたログ ファイルは、作成順に番号付けされます。たとえば、7 番目にローテーションされたファイルは myserver.log00007 という名前になります。トラブルシューティングを容易にするため、ログ ファイルの名前を変更したり、ログ ファイルがローテーションされた日時を含めたりできます。ログ ファイル名に日時を含めるには、ファイル名に java.text.SimpleDateFormat 変数を追加します。それぞれの変数はパーセント記号 (%) で囲みます。ログ ファイルの名前の変更時に相対パス名を指定した場合、サーバのルート ディレクトリが基準と解釈されます。

SAF エージェントのログ ファイル名の変更については、Administration Console オンライン ヘルプの「SAF エージェントの JMS メッセージのログ ローテーションのコンフィグレーション」を参照してください。

保存するメッセージ ログ ファイル数の制限

古いメッセージ ログ ファイルをファイル サイズまたは時間間隔に基づいてローテーションする場合は、古いメッセージの格納のために SAF エージェントが作成するログ ファイルの数を制限することもできます。この制限に達すると、最も古いログ ファイルが削除され、最新のサフィックスの付いた新しいログ ファイルが作成されます。このオプションを有効にしない場合は新しいファイルが無限に作成されていくため、必要に応じてこれらのファイルを手動で削除する必要があります。

SAF エージェントのメッセージ ログ ファイル数の制限については、Administration Console オンライン ヘルプの「SAF エージェントの JMS メッセージのログ ローテーションのコンフィグレーション」を参照してください。

 


JMS SAF 関連のよくある質問

この節では、WebLogic ドメインでの JMS SAF の動作に関するよくある質問とその回答を示します。

Q. JMS プロデューサに対して、SAF ではどの送信エージェントが選択されますか。

A. JMS プロデューサに対する送信エージェントの選択には、WebLogic Server クラスタのロード バランシング機能が使用されます。ある JMS プロデューサに対して SAF エージェントが選択されると、その JMS プロデューサの稼動期間中、選択されたエージェントが使用されます。

Q. JMS クライアントはどのようにして SAF 送り先を検索しますか。

A. SAF 送り先は、SAF JMS 送り先でない送り先と同じ方法で検索できます。

Q. JMS SAF インポート済み送り先への JMS プロデューサの送信メッセージを JMS 順序単位に関連付けることはできますか。

A. はい。順序単位機能については、『WebLogic JMS プログラマーズ ガイド』の「メッセージ順序単位の使用」を参照してください。

Q. なぜ、送信側がクラスタである場合には、JMS 順序単位に関連付けられた JMS プロデューサでメッセージの送信が失敗するのですか。

A. SAF で JMS 順序単位を使用するには、送信側クラスタでパス サービスをコンフィグレーションする必要があります。パス サービス機能については、『WebLogic JMS のコンフィグレーションと管理』の「WebLogic パス サービスの使用」を参照してください。

Q. 同じ順序単位内の別々の JMS プロデューサでは、同じ送信エージェントが選択されますか。

A. はい。JMS SAF では、同じ送信エージェントにルーティングするためにパス サービスが使用されます。

Q. JMS SAF インポート済み送り先にコンシューマをアタッチできますか。

A. いいえ。JMS コンシューマは、実際の JMS 送り先にしかアタッチできません。

Q. 分散送り先をインポートすることはできますか。

A. はい。JNDI 名を使用してインポートできます。

Q. 送信側クラスタにインポートされた分散送り先に対しては、どこで、サーバ アフィニティを有効化、ロード バランシングを有効化、および転送の遅延の各パラメータをコンフィグレーションするのですか。

A. サーバ アフィニティを有効化およびロード バランシングを有効化の各パラメータは、JMS プロデューサが作成された JMS 接続ファクトリでコンフィグレーションします。JMS 接続ファクトリで JMS 接続が作成され、JMS 接続で JMS セッションが作成され、JMS セッションで JMS プロデューサが作成されます。転送の遅延のパラメータは、JMS 分散送り先でコンフィグレーションします。

Q. 送信側クラスタまたはサーバの JMS 接続ファクトリでコンフィグレーションされた、サーバ アフィニティを有効化およびロード バランシングを有効化の各パラメータは、JMS 送り先のある受信側クラスタまたはサーバにも適用されますか。

A. はい。送信側クラスタまたはサーバのこれらの属性は、受信側クラスタまたはサーバにも適用されます。分散送り先に対するサーバ アフィニティとロード バランシングについては、『WebLogic JMS のコンフィグレーションと管理』の「分散送り先リソースのコンフィグレーション」を参照してください。

Q. 送信側クラスタ上の XA トランザクションは JMS SAF 境界を越えますか。つまり、受信側は送信側からのトランザクションに参加できますか。

A. いいえ。メッセージはトランザクションがコミットされるまで転送されません。

Q. JMS SAF では、JMS セッション内で送信側から JMS 送り先に送信されたメッセージの順序は保持されますか。

A. はい。

Q. SAF リモート コンテキストには、プリンシパル名またはユーザ名とパスワードをコンフィグレーションする必要がありますか。

A. SAF リモート コンテキストは、自分の好きなようにコンフィグレーションできます。ユーザ名とパスワードは JMS モジュールに格納され、プリンシパル名は送信側ドメインでコンフィグレーションされている資格マッピング プロバイダに格納されます。

Q. 共通分散送り先 (UDD) のメンバシップを変更したら、SAF が正常に機能しなくなったようです。何が起こったのでしょうか。

A. プロセスの通信対象となるすべてのドメインに対して、クロス ドメイン セキュリティのコンフィグレーションが統一されていることを確認してください。1 つのドメインにクロス ドメイン セキュリティがコンフィグレーションされている場合は、すべてのドメインにクロス ドメイン セキュリティをコンフィグレーションする (または、適切な例外リストに含める) 必要があります。『WebLogic JTA プログラマーズ ガイド』の「ドメイン間トランザクションに対するドメインのコンフィグレーション」を参照してください。


ページの先頭       前  次