OutOfMemoryErrorが発生した場合の対処方法
    • PDF

    OutOfMemoryErrorが発生した場合の対処方法

    • PDF

    記事の要約

    概要

    TROCCOでは、STEP2のプレビュー時やジョブ実行時に、メモリ不足(Out Of Memory)によるエラーが発生することがあります。
    本ページでは、OutOfMemoryErrorが発生する原因とその対処について説明します。

    エラーメッセージ例

    メモリ不足が原因でエラーが発生した場合、以下のようなエラーメッセージがログに表示されます。

    OutOfMemoryError: GC overhead limit exceeded
    
    OutOfMemoryError: Java heap space
    

    考えられる原因

    OutOfMemoryErrorは、一度のジョブで転送するデータ量がTROCCOの処理能力を上回ってしまい、TROCCOのジョブ実行コンテナのメモリを使い切っている場合に発生します。
    より具体的には、下記のケースにおいて発生します。

    • データの取得時:TROCCOの転送設定の内容によって、取得対象のデータ量が膨大になる
    • データの投入時:転送先コネクタ側の同時接続数などの設定内容によって、処理量が膨大になる

    対処

    いくつかの対処が考えられます。

    転送データを分割する

    転送元コネクタの設定により、取得したデータ量が膨大である場合、一度に取得するデータ量を減らす必要があります。
    たとえば、転送元コネクタの設定の以下の部分を、取得データ量が少なくなるよう調整してください。

    • 転送元ファイル・ストレージ系:パスプレフィックス
      • 一度に取得するファイル数を減らせるよう、階層を深く指定してください。
      • カスタム変数を埋め込むことで1ファイルずつ取得できます。
    • 転送元データベース系:クエリ
      • WHERE句を記述することによって、一度に取得するレコード数を減らしてください。
      • WHERE句にカスタム変数を埋め込むことによって、実行のたびに取得するレコードを動的に指定できます。
    • 転送元クラウドアプリケーション・広告系:データ取得期間
      • 期間を絞り込むことによって、一度に取得するレコード数を減らしてください。
      • データ取得の開始日・終了日にそれぞれカスタム変数を埋め込むことができます。

    上記に加え、取得対象のカラムを絞ることや、カスタム変数ループ実行を利用してジョブ自体を分割することもご検討ください。

    ジョブ設定を見直す

    TROCCOで同時に複数のジョブを実行すると、転送先サービスに対して多くの処理をリクエストすることになります。
    同時刻に実行するジョブが多くなりすぎないよう、スケジュール設定やワークフローの並列実行数を調整してください。

    一回のリクエストで取得する行数を引き下げる

    一部の転送元コネクタには、一回のリクエストで取得する行数を指定できる設定項目が存在します。(例:転送元 - Google Analytics 4
    このような設定項目がある場合、その設定値を適宜引き下げてください。

    バッチサイズを引き下げる

    一部の転送先コネクタには、バッチサイズを指定できる設定項目が存在します。(例:転送先 - Snowflake
    このような設定項目がある場合、その設定値を適宜引き下げてください。

    転送先サービス側の設定を調整する

    転送先サービス側でメモリの割り当てや同時接続数の上限を指定できる場合、その値を調整してください。
    たとえば転送先Snowflakeであれば、同時実行クエリの制限によって、1クエリあたりのパフォーマンスを向上させることができます。


    この記事は役に立ちましたか?