teratail header banner
teratail header banner
質問するログイン新規登録
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

1回答

91閲覧

DockerコンテナでNode.jsのストリーム処理の検証ができない

yu128n

総合スコア0

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2025/07/05 11:38

編集2025/07/05 11:44

0

0

実現したいこと

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のファイルでも問題なく処理できる

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

OOMKilledが出ていることから、メモリ不足が原因のようです。10GBのファイルを2GBのメモリ環境で扱うのは、たとえストリーム処理でも厳しい場合があります。

簡単な方法は、ローカルDockerコンテナに割り当てるリソースを増やすことです。Docker DesktopのResources設定から、CPUとメモリの上限を上げてみてください。4GB設定すると余裕ができると思います。

数MB程度の小さなファイルをいくつか用意し、まずはそれらでストリーム処理が正しく動作することを確認。動作確認ができたら、徐々にファイルサイズを大きくしていくことで、問題が発生する境界を見つけることができると思います。

投稿2025/07/07 08:51

peyo

総合スコア86

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問