スクリプトが実行中のまま終了しない状況になりました

Avatar
dstn

Question

スクリプトが実行中のまま終了しない状況になりました。
なぜこのような状況になるのでしょうか。確認方法を教えてください。

Answer

■事象の発生条件

スクリプトで接続先にリクエストを出してレスポンスがない場合、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. 事象発生時とそうでないときの比較
 事象が発生するケースと、発生しないケースがある場合は、二つを比較して、差がある点を
 ご確認ください。

 たとえば、特定の接続先に接続しているスクリプトでのみ発生する場合には、その接続先が
 原因である可能性が高くなります。
 また、同時に複数の処理を実行している状況でのみ発生する場合には、多重実行が
 原因となっている可能性が高くなります。

■調査のために必要な情報

以下の事象発生時のログを添付の上、アプレッソ サポートセンターまでお問い合わせください。

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] > [出力先ファイル名]

注意事項
 「jstack」、「PsExec」はいずれも外部のツールとなります。
 このため、仕様の詳細に関しては、大変恐縮ですが各ツールの開発元にご確認をお願いいたします。

参考情報

・ログ出力
 http://patch.appresso.com/DataSpider/help/DSS31/doc/help/ja/adapter/basic/log.html

・ドライバによるトレース取得
 ・Oracle 
  http://docs.oracle.com/cd/E16338_01/java.112/b56281/diagnose.htm
  ※ Java システム・プロパティに対して引数を追加する場合には、
     $DATASPIDER_HOME/server/bin/DataSpiderServer.lax の
     lax.nl.java.option.additional に指定してください。
 ・PostgreSQL
  http://old.postgresql.jp/wg/jpugdoc/jdbc/jdbc-8.3dev-600/connect.html
  ※ DEBUG を示す「loglevel=2」は、グローバルリソースの [URL] に追記してください。

 ※設定内容に関する詳細は、データベースの開発元までご確認ください。
 ※上記に記載されていないデータベースのトレースの取得方法は、
  データベースの開発元までご確認をお願いいたします。

・jstack
 http://docs.oracle.com/javase/jp/6/technotes/tools/share/jstack.html

・PsExec
 http://technet.microsoft.com/ja-jp/sysinternals/bb897553.aspx



[注意事項]
  • このFAQの内容は2017年3月時点のものです。内容は予告なく変更されることがありますので、ご注意ください。
  • 一部にDataSpider Servistaサポートサイトへのリンクを含むことがあります。サポートサイトにアクセスするには、DataSpiderのサポート契約が必要です。


ID:Q216

コメント

記事コメントは受け付けていません。

Powered by Zendesk