DataWeave メモリ管理

Mule Runtime Engine で DataWeave を介して大きなファイルを処理する場合、どれだけのメモリをいつ使用するかを詳細に調整するためにセットアップできるいくつかの項目があります。

RAM の使用とディスクの使用

DataWeave は小さいファイルをメモリに保存しますが、設定可能なしきい値を超えると、ディスク領域を使用してメモリ不足にならないようにします。作成されたバッファファイルはデフォルトの一時ディレクトリに配置されます。このファイルを代わりにカスタムディレクトリに保存する場合は、​java.io.tmpdir​ プロパティを使用してディレクトリを指定できます。

バッファファイルは、そのファイルを参照するストリームが終了するまで一時ディレクトリに保持されます。終了するのは通常、フローの実行が完了するときであるため、一時フォルダーにある多くのバッファファイルは、長時間や同時の実行の間、使用中のままになることがあります。

3 種類の DataWeave バッファファイルが生成されます。

  • dw-buffer-output-${count}.tmp
    変換の結果がしきい値の ​1572864 バイト​よりも大きい場合に、変換の出力を保存するために使用されます。 このしきい値を変更するには、システムプロパティ ​com.mulesoft.dw.max_memory_allocation​ を追加し、新しいしきい値として使用するバイト数をそのプロパティに割り当てます。 Mule Runtime Engine は、値が参照されなくなった、JVM GC によって値が収集された、または Mule イベントの実行が終了した場合に、ファイルを削除します。

  • dw-buffer-input-${count}.tmp
    変換の入力がメモリ内のバッファ (デフォルトでは ​1572864 バイト​) よりも大きい場合に、変換の入力を保存するために使用されます。 これは ​dw-buffer-output-${count}.tmp​ ファイルと似ていますが、入力データ用です。

  • dw-buffer-index-${count}.tmp
    読み取られている値のインデックス情報を保存するために使用されます。このファイルは、DataWeave がデータにすばやくアクセスするのに役立ちます。Mule Runtime Engine は、変換の実行が終了した場合にファイルを削除します。また、foreach ループなどのストリーミングのユースケースでは、ストリームが終了した場合 (foreach の実行が終了した場合) にファイルを削除します。

システムプロパティ:
システムプロパティはいくつかの方法で定義できます。詳細は、​システムプロパティ​を参照してください。

  • com.mulesoft.dw.buffersize
    このシステムプロパティは、処理された入力および出力を保存するために DataWeave で使用するメモリ内の入力バッファおよび出力バッファのサイズ (バイト単位) を決定します。デフォルトのバッファサイズは 8192 バイト (8 KB) です。 このプロパティは数値 (バイト数での数値) を受け取ります。例: -Dcom.mulesoft.dw.buffersize=8192​。

  • com.mulesoft.dw.directbuffer.disable
    Mule 4.2.2 で導入されたこのオプションは、DataWeave がオフヒープメモリ (デフォルト) またはヒープメモリのどちらを使用するかを制御します。DataWeave は、内部バッファにはヒープメモリを使用します。ただし、メモリの搭載量が少ないマシンでは、この設定によって問題が起きる場合があります。 このプロパティは論理値を受け取ります。例: -Dcom.mulesoft.dw.directbuffer.disable=true​。

  • com.mulesoft.dw.memory_pool_size
    Mule 4.3.0 以降、DataWeave バッファでは、定義されたサイズまでプールからのオフヒープメモリが使用され、残りはヒープメモリを使用して割り当てられます。このプロパティはプール内のスロット数を決定します。 デフォルトのスロット数は 60 です。 このプロパティは数値 (プールのスロット数) を受け取ります。例: -Dcom.mulesoft.dw.memory_pool_size=60​。

  • com.mulesoft.dw.max_memory_allocation
    Mule 4.3.0 で導入されたこのプロパティにより、ディスクに切り替える前に使用される最大メモリ量が決まります。ペイロードがこのサイズを超えると、ペイロードは ​dw-buffer-input-${count}.tmp​ および ​dw-buffer-output-${count}.tmp​ の一時ファイルに保存されます。 また、オフヒープメモリのプールの各スロットのサイズ (バイト単位) も決まります。デフォルトのサイズは 1572864 バイト (1.5 MB) です。 このプロパティは数値 (バイト数での数値) を受け取ります。例: -Dcom.mulesoft.dw.max_memory_allocation=1572864​。

  • com.mulesoft.dw.buffer.memory.monitoring​ (実験段階)
    Mule 4.3.0 で導入されたこのプロパティを有効にすると、スロットがメモリプールから取得または解放されるたびにメッセージが記録されます。 これは今後のバージョンでは削除されるか、動作が変更される場合があります。 このプロパティは論理値を受け取ります。例: -Dcom.mulesoft.dw.buffer.memory.monitoring=true​。