10

node.jsサーバーで速度が低下したり、応答しなくなったりすることがあります。サーバーに接続しようとすると、ゲートウェイが503タイムアウトになることがあります。

このラグは、外部API(Facebook、Twitter、その他多数)に接続するためにnode-oauthモジュールを使用して行っている多数のアウトバウンドリクエストに特に起因していると(私が実行したテストに基づいて)99%確信しています。確かに、行われるアウトバウンド要求の数は比較的多いです(1分あたり30程度程度)。さらに悪いことに、これは、サーバーへの対応するインバウンド要求が完了するまでに最大5〜10秒かかる可能性があることを意味します。ただし、PHPで記述した以前のバージョンのAPIを使用していたため、この量のアウトバウンド要求をまったく問題なく処理できました。実際、Node.js APIを使用した同じ数(またはそれ以下)のリクエストのCPU使用率は、PHPAPIの約5倍です。

したがって、これを改善できる場所を特定しようとしています。最も重要なのは、503タイムアウトが発生しないようにすることです。これが私が読んだり実験したりしたものです:

  • この記事(LinkedInによる)では、ソケットプーリングをオフにすることを推奨しています。しかし、私が人気のあるnodejs-requestモジュールの作者に連絡したとき、彼の応答は、これは非常に悪い考えであるというものでした。
  • 「http.globalAgent.maxSockets」を多数に設定すると役立つと聞いていますが、実際、ボトルネックを減らすことができたようです。

先に進むことはできますが、要するに、これらのアウトバウンド接続がクライアントからのインバウンド要求に遅れをとらないように、パフォーマンスを最適化する方法に関する明確な情報をほとんど見つけることができませんでした。

考えや貢献を事前に感謝します。

FWIW、私はエクスプレスとマングースも使用しており、サーバーはAmazonクラウドでホストされています(ノードサーバー用に2x M1.Large、2xロードバランサー、3x M1.Small MongoDBインスタンス)。

4

2 に答える 2

2

エージェントがリクエストをホストごとのデフォルト レベル 5 に制限しているように思えます。あなたのテストは、エージェントのクランクアップがmaxSockets助けになったことを示しています...あなたはそうすべきです。

これが問題であることを証明するには、パケット スニファーを起動するか、アプリケーションにデバッグ コードを追加して、これが制限要因であることを示します。

于 2012-08-30T16:35:40.703 に答える