約 100 万レコードの大きな CSV ファイルを処理しようとしています。行 (行/行またはチャンク) を読み取った後、これをプッシュしてcamel-flatpack
、フィールド名とその値を含むマップを作成する必要があります。
私の要件は、すべての CSV レコードをフラットパック構成にフィードし、そこから java.util.map を生成することです。
これをスプリッターで解決するためのスタックオーバーフローに関する投稿がいくつかありましたが、私のプロセスはほぼ 35000 レコードまで高速に動作しますが、その後は遅くなります。
スロットルを追加しようとしましたが、まだ機能しません。GC Out Of Memory エラーが発生します。JAVA_MIN_MEM
、 、JAVA_MAX_MEM
も撃ちましたJAVA_PERM_MEM
がJAVA_MAX_PERM_MEM
、結果は同じです。Hawtio コンソールは、JAVA_HEAP_MEMORY
約 5 ~ 6 分後に 95% 以上であることを示しています。
ここに私のコードスニペットがあります:
<route id="poller-route">
<from uri="file://temp/output?noop=true&maxMessagesPerPoll=10&delay=5000"/>
<split streaming="true" stopOnException="false">
<tokenize token="\n" />
<to uri="flatpack:delim:flatpackConfig/flatPackConfig.pzmap.xml?ignoreFirstRecord=false"/>
</split>
</route>
<route id="output-route">
<from uri="flatpack:delim:flatpackConfig/flatPackConfig.pzmap.xml?ignoreFirstRecord=false"/>
<convertBodyTo type="java.util.Map"/>
<to uri="mock:result"/>
</route>