6

これはおそらく初心者の質問ですが、検索しても満足のいく答えが見つかりませんでした。

node.js アプリケーションが大量のメモリを消費しているようです。各プロセスは約 100MB を消費します。nodejs 自体は、プロセスごとに最大 30MB のメモリ フットプリントを持っていると聞きました。

アプリケーションは、MongoDB を基盤とする JSON API です。多くの場合、1 つの API リクエストが多くのデータベース リクエストを引き起こし、主に子関係を設定します。典型的なクエリは次のようなものです: (1) クエリ条件に基づいて objectId の配列を取得し、(2) 各 objectId を繰り返し、データベースにクエリを発行してデータを入力します (ハイドレーションと呼ばれるものもあります)。

コードは async.js を多用しています。メモリ使用量をプロファイリングしようとしましたが、async.js が多くのメモリを使用しているようですが、メモリ リークの兆候はありません。async.js の作成者は、ストリーム ライブラリ highland.js ( http://highlandjs.org/ ) も発表しました。私は nodejs ストリームを初めて使用しますが、これが async.js を置き換える可能性のあるツールであるかどうかに興味がありますか? Webサイトに記載underscoreがあるようですが、私は主async.jsに非同期処理に使用しています。

ありがとう!

4

1 に答える 1

1

tldr:はい、ストリームを使用すると、メモリ フットプリントを削減できる可能性があります。ストリームを処理するときは、一度にデータのチャンクを処理します。別の方法は、基本的にすべてのデータを事前に文字列、バッファなどにロードしてから処理することです。

ただし、ノード プロセスの場合、100MB は大きくないことに注意してください。Node/v8 では、約 1.5 GB を使用できると想定しています。小さなアプリは 128 MB、小さなアプリは 256、中型の 512 です。1 GB はかなり大きなノード プロセスであり、その時点でアプリをより小さな部分に分割する必要があります。

于 2015-07-25T18:14:57.937 に答える