■事象の発生条件
スクリプトで接続先にリクエストを出してレスポンスがない場合、DataSpider Servista が待ち状態となり、今回の事象が発生することがあります。
■想定される原因
過去事例では以下の要因で発生しておりました。
- 接続先で処理が長時間にわたり終了していない場合
- ネットワークの瞬断によりリクエストに対するレスポンスが受信できなかった場合
- RMI接続設定に誤りがある端末から接続した場合
■回避策
処理中のスクリプトを停止するためには、DataSpiderServer を再起動してください。
■対応策
下記の「■確認するポイント」を元に、問題が発生している箇所をしぼりこみ、原因の切り分けを進めていただき、接続先や環境が原因となっている場合には、その原因について対応してください。
原因特定が困難な場合には、「■確認するポイント」を元にご確認いただいた情報をもとに「■調査のために必要な情報」 をご参照いただき、サポートセンターまでご連絡をお願いいたします。
■確認するポイント
1. 発生箇所の特定
実行ログやサーバログから、事象が発生しているコンポーネント(アイコン)をご確認ください。
・実行ログから特定できなかった場合
3.0 SP2 以前では、一定の容量(数KB)がバッファされてから実行ログを出力していたため、スクリプトの処理が停止していた箇所を厳密に特定できないことがあります。
この場合、停止している可能性がある箇所の前後に、ログ出力処理を追加して、処理がどこまで進んで停止しているか特定してください。
※ログ出力処理の詳細は「参考情報」の url をご参照ください。
※3.1 からは、各アイコンの処理毎に実行ログを出力するよう仕様を変更しているため、ログ出力処理の追加は必要ありません。
2. 接続先の特定
1. で特定したコンポーネントで使用しているグローバルリソースから、接続先を特定してください。
3. 接続先、ネットワークの状況確認
2. で特定した接続先に関して、接続先のデータベース、アプリケーション、ファイルシステム、またはネットワークの処理状況を確認して、事象発生時に、処理が停止していたか(リクエストに対してレスポンスを返していなかった状態か)ご確認ください。
データベースに関しては、ログの他に、接続に使用しているドライバから詳細なログを取得できる場合があります。過去事例で確認したものについては「参考情報」に記載しています。
コンポーネントの特定が難しい場合は、「4.」「5.」から、発生条件をご確認ください。コンポーネントが特定できても、停止している原因が不明な場合(接続先からレスポンスを返しているはず、など)には、 「■調査のために必要な情報」 をご参照いただき、サポートセンターまでお問い合わせをお願いいたします。
4. 接続設定の確認
DataSpiderServer や DataSpider Studio の接続設定をご確認ください。
過去事例では RMI 接続設定(java.rmi.server.hostname)が不正な端末からデバッグ実行した場合に、他のスクリプト実行処理・スクリプトプロセスを取得する処理が待ち状態となった例がありました。
5. 事象発生時とそうでないときの比較
事象が発生するケースと、発生しないケースがある場合は、二つを比較して、差がある点をご確認ください。
たとえば、特定の接続先に接続しているスクリプトでのみ発生する場合には、その接続先が原因である可能性が高くなります。
また、同時に複数の処理を実行している状況でのみ発生する場合には、多重実行が原因となっている可能性が高くなります。
■調査のために必要な情報
以下の事象発生時のログを添付の上、DataSpider 製品サポートセンターまでお問い合わせください。
1. 事象発生時のログファイル
- $DATASPIDER_HOME/server/logs/server.log
- $DATASPIDER_HOME/server/logs/server.log.n (n:整数)
- $DATASPIDER_HOME/server/logs/server.error.log
- $DATASPIDER_HOME/server/logs/${実行日付}/exec.log
- $DATASPIDER_HOME/server/logs/${実行日付}/execution/${実行ID}.xml
2. スレッドダンプ
実行中のスレッドの一覧(スレッドダンプ)を出力することで、事象発生時に実行されている処理を特定することができます。
スレッドダンプは「jstack」というツールを使用することで簡易に取得することができます。
※詳細は「参考情報」の url をご参照ください。
DataSpider Servista の調査に必要なスレッドダンプは以下のコマンドで取得することができます。
jstack -l PID > 出力ファイル
なお、サービス起動しているプロセスについては、OS側でプロセスへのアクセスを制限しているため、上記コマンドがエラーとなります。その場合には「PsExec」というツールを使用することで回避できます。
※詳細は「参考情報」の url をご参照ください。
「PsExec」を使用した場合、以下のようなコマンドで取得できます。
psexec -s jstack -l [PID] > [出力先ファイル名]
スレッドダンプの取得時には、数秒おきに複数回(例えば、5秒おきに10回など)取得いただきますようお願いします。
※スレッドダンプは、取得のコマンド実行の瞬間の状態を切り取ったものになりますため、複数回取得いただき比較することで調査に有効な可能性がございます。
注意事項
「jstack」、「PsExec」はいずれも外部のツールとなります。
このため、仕様の詳細に関しては、大変恐縮ですが各ツールの開発元にご確認をお願いいたします。
参考情報
・ログ出力
・ドライバによるトレース取得
・Oracle
※ Java システム・プロパティに対して引数を追加する場合には、
$DATASPIDER_HOME/server/bin/DataSpiderServer.lax の
lax.nl.java.option.additional に指定してください。
※設定内容に関する詳細は、データベースの開発元までご確認ください。
※上記に記載されていないデータベースのトレースの取得方法は、データベースの開発元までご確認をお願いいたします。
・jstack
・PsExec