実現したいこと
DockerコンテナでNode.jsのストリーム処理の検証がしたい。
AWSのECSタスク上でS3にある大量のファイルを一つのZIPファイルに変換する処理を作ろうとしており、その処理をローカル端末のDockerを使用して検証したいが、大容量(合計10GB)のファイルの処理がうまくいかない状態です
ローカルのDockerは1vCPU, メモリ2GBに設定しています
ECSタスクだと同じ1vCPU, メモリ2GBで問題なく処理できます
発生している問題・分からないこと
Dockerコンテナがハングする
docker inspect local-container | grep OOM
を実行すると
"OOMKilled": true,
が表示されるのでメモリを使ってしまっていると思われる
該当のソースコード
import * as fs from 'fs'; import * as archiver from 'archiver'; import * as path from 'path'; import * as os from 'os'; const streamProcessing = async (outputPath: string) => { return new Promise<void>((resolve, reject) => { const output = fs.createWriteStream(outputPath); const archive = archiver.create('zip', { zlib: { level: 9 }, // 圧縮レベル }); // 圧縮されたデータが自動的に出力ファイルに流れる archive.pipe(output); output.on('close', () => { console.log('ZIP作成完了'); resolve(); }); archive.on('error', (err) => { console.error('ZIP作成エラー:', err); reject(err); }); // ファイル追加処理 const files = ['file1.txt', 'file2.txt', 'file3.txt']; for (const fileName of files) { console.log(` → ${fileName} をストリームに追加`); // 実際の処理では、ここでS3からファイルを取得してストリームに追加 // archive.file(filePath, { name: fileName }); } archive.finalize(); }); };
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
AWSのECSタスク(1vCPU, メモリ2GB)上にデプロイして処理を動かすと、合計10GBのファイルでも問題なく処理できる
補足
特になし

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。