2 つのフローを持つ Spring バッチ アプリケーションを開発しました。1. 前方 2. 後方。ファイルの読み取り/書き込みのみを使用しており、DB は関与していません。
Forward Scenario : 入力ファイルには、22 個のフィールドを持つレコードが含まれます。シーケンス番号の生成やいくつかのフィラー フィールドの追加などの操作を実行して、22 個のフィールドを 32 個のフィールドに変換します。国コードに基づいて、出力は最大 3 つに分割されます。各チャンクには 250K のレコードが含まれます。(レコードが 100 万単位の場合、同じ国に対して複数のファイルが生成されます)。
8 Million は 36 分かかることを記録しています。
800 万件のレコードが 1 つのファイルになります。
使用しているスプリング バッチ スレッド 1000 スレッドを使用しています。
Backward Flow : 入力ファイルには、各レコードに 82 個のフィールドがあります。これらの 82 フィールドは 86 レコードに変換されます。間に 2 つのフィールドが追加され、Forward フロー入力ファイルから取得されます。他のフィールドは単にコピーして貼り付けます。エラー記録もエラーファイルに書き込まれます。エラーレコードは、Forward フローのために実際に入力されたレコードに他なりません。追跡するために、ファイル内のシーケンス番号と実際のレコードを永続化しています。これはフォワード フロー自体で行われます。バックワード フローで永続ファイルを取得し、欠落しているものがあればシーケンス番号を比較し、キーと値のペアを介してエラー レコードに書き込みます。このプロセスは、逆流の完了後に行われます。
入力ファイルの最大サイズは 250K です。
8 Million は 1 時間 8 分を記録していますが、これは残念です。このフローでは、入力用に 32 個のファイル (各 250K) があります。逆に使用されるスレッドはありません。スレッドの使用方法はわかりません。試しましたが、プロセスがハングしました。
サーバー構成:
12 CPU & 64 GB Linux サーバー。
12 CPU/64GB RAM を使用しているため、パフォーマンスを改善するためにこの点で助けていただけますか。