4

私は、何万ものアクティブなソケット同時接続を処理する必要があるプロジェクトに取り組んでいます。メモリ使用量と V8 エンジンを調べたところ、Node.js v0.10.19 (安定版) を使用しています。

「システムのメモリ不足」イベントが発生する余裕はありません。そのため、現在、1 つのサーバー上で最大 15 のノード インスタンスを実行し、それぞれが 1 GB の RAM に制限されています。十分な RAM があり、クアッド コア xeon プロセッサとロード バランサーを使用して、すべてのインスタンス間で負荷を整理します。

では、ソケット接続を V8 ヒープ スタックの外側にバッファなどの方法で保存して、Node.js のメモリ使用量を削減する方法はありますか?

4

1 に答える 1

1

当然、数千または数万の接続を開いたままにしておくと、そうすることでメモリ コストが発生します。

これが私が尋ねることです:

いっぱいになっている配列またはオブジェクトに何かを追加していますか?

開いている接続ごとに重いモジュールをインスタンス化していますか?

プロファイラーを実行して、何が何をしているのかを確認できますか? (人々はその DTrace について絶賛しています。)

Web ソケットを開いたままにする代わりに、必要な間隔でポーリングすることは可能でしょうか?

プロファイラーを実行できない場合に試すことができる別の方法は、実行中のアプリの状態をログに記録して、問題を分析できるようにすることです。これは昔ながらの手法ですが、関数が終了するたびにログを記録し、現在のメモリ使用量を確認できます。それもメモリを食いつぶす可能性がありますが、問題がそのように見つかった場合は素晴らしいことです。

メモリ使用量の確認は、Process モジュールを介して行われます。

http://nodejs.org/api/process.html#process_process_memoryusage

頑張ってください。あなたが見つけたことを教えてください。この非常に困難な問題をどのように解決するのか、私は興味があります。

于 2013-09-29T16:48:16.593 に答える