• No : 21334
  • 公開日時 : 2015/03/02 08:15
  • 更新日時 : 2024/12/05 14:37
  • 印刷

【DataSpider Servista】 スクリプト実行時にエラーが発生したりDataSpider Studioが接続できなくなったりします

スクリプト実行時にエラー(ScriptNotFoundException)が発生したり、DataSpider Studio が接続できなくなったりする問題が不定期に発生しています。
サーバログ、サーバ標準エラー出力を確認したところ、以下のようなエラーが出力されていました。原因と対応策について教えてください。
 
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: Metaspace
 
カテゴリー : 

回答

■エラーの発生条件
 
ご質問いただいたエラーは、Java のメモリ領域のうち、DataSpider のスクリプトの情報、クラスなど、各種処理の実行に必要なモジュールが格納されている領域が不足した場合に発生します。
 
このメモリ領域は、バージョン 4.0(JRE 1.8 ) 以降では Metaspace 領域、バージョン 3.2まで(JRE 1.7 以前)はパーマネント(PermGen space)領域と呼ばれています。
 
■想定される原因
 
過去事例では、作成されるプロジェクトやスクリプト、トリガーの数が多くなった場合に、ご質問いただいたエラーが発生していた例がありました。
 
■対応方法
 
パーマネント領域または Metaspace 領域を拡張して、事象が解消されるかご確認をお願いいたします。
 
設定の変更方法については以下をご参照ください。なお、設定の詳細につきましては、参考情報に記載したヘルプをご参照ください。
 
■設定変更方法
  1. DataSpiderServer を停止してください
  2. 以下の設定ファイル、設定キーを変更してください。

  ・設定ファイル
   $DATASPIDER_HOME/server/bin/DataSpiderServer.lax

  ・設定キー
   lax.nl.java.option.additional

   このキーに指定されている、「-XX:MaxPermSize=」または
   「-XX:MaxMetaspaceSize=」の「=」以降の値を、
   現在の値よりも大きくしてください。

  1. DataSpiderServer を起動してください。
■注意点
 
※ 適切な設定値は、運用や設定内容により異なるため、お手数ですが、値を変更した後で事象が解消されるかチューニングをお願いいたします。
 
※ -XX:MaxPermSize は、バージョン 2.x の Windows OS の x64 版 DataSpider Servista には存在しませんのでご注意ください。
 
※ バージョン 2.x の Windows x64 版 DataSpider では Q に記載したエラーは発生しません。
 
※ DataSpider Servista が使用している JRE の影響により、バージョン 3.2まで(JRE 1.7 以前)パーマネント領域で指定していた設定が、バージョン 4.0(JRE 1.8 )から Metaspace 領域に変更になりました。
 
■補足

スクリプトの情報以外では、トリガー、グローバルリソース、Studio の各種操作等の様々な処理を DataSpiderServer 起動後に初めて実行するタイミングで Metaspace 領域を使用します。

Metaspace 領域のクラス等の永続的に参照される情報は、 DataSpiderServer 起動中には解放されません。
そのため、Metaspace 領域は余裕を持った値を設定してください。

DataSpiderServer の Metaspace 領域の使用状況を確認する場合、Java の jstat コマンド等の外部ツールで確認する必要があります。

 
なお、スクリプトの情報で必要な Metaspace 領域の容量は、Mapperの設定内容より概算できます。
 
容量算出の対象となるのは、以下のMapperです。

・サーバに登録されたプロジェクトに含まれる全ての Mapper
・デザイナから実行したスクリプトが含まれるプロジェクト中の全ての Mapper

各Mapperに対して、以下を合計した容量が必要となります。
 
(1) 入力要素、出力要素
1つあたり、150 バイト
※ columnのみでなく、table 、row も対象となります。
※ マッピングされている/されていないは関係なく容量を必要とします。
 
(2) ロジックアイコン
1つあたり、200 バイト
※ マッピングされている/されていないは関係なく容量を必要とします。
 
(3) スクリプト変数、コンポーネント変数
1つあたり、150 バイト
※「1.」「2.」と異なり、マッピングされている場合だけ容量を必要とします。
 
例:
 
例として、以下のような設定のスクリプトの容量について計算します。

・データベースから読み取った3つのカラムのデータを[単純な繰り返し]でファイル書き込み処理の3つのカラムにマッピング
・コンポーネント変数の「error_code」をスクリプト変数にマッピング

( [table] + [row] + [column] × 3 )  #入力元
 + ( [table] + [row] + [column] × 3 ) #出力先
 + [単純な繰り返し]
 + ( [コンポーネント変数] + [スクリプト変数] )
=
( 150 + 150 + 150 × 3 )
 + ( 150 + 150 + 150 × 3 )
 + 200
 + ( 150 + 150 )
= 2 KB
 
また、mapper が多数あり、個別のカウントが現実的ではない場合、以下の計算式でおおよその容量を試算してください。
 
(Mapper の入力要素、出力要素の数の平均 × 150 + ロジックアイコンの数の平均 × 200 +
Mapping されているスクリプト変数、コンポーネント変数の数の平均 × 150 ) ×
(サーバに登録されたプロジェクトに含まれるMapperの数 + デザイナから実行したスクリプトが属するプロジェクトに含まれるMapperの数)
 
 
参考情報
  • プロパティリファレンス
バージョン3.2 まで
 
バージョン4.0 以降
 
目的別で検索
トラブルシューティング