1

私は NodeJS を使用した Web アプリケーションから始めていますが、解決方法がわからないアプリの問題が 1 つあります。

アプリケーション (expressjs を使用) はローカル マシンでスムーズに動作していますが、負荷テストのために開発サーバーにデプロイすると、次のようなエラーが発生します。

Error: connect EADDRNOTAVAIL at errnoException (net.js:770:11) at connect (net.js:646:19) at Socket.connect (net.js:711:9) at asyncCallback (dns.js:68:16) at Object.onanswer [as oncomplete] (dns.js:121:9) GET XXXXXXX 500 21ms

私たちのアプリケーションにはデータベースがなく、Rest API バックエンドを処理します。構築するすべてのページには、バックエンドへの 1 つ以上の呼び出しが必要です。キャッシング システムを使用する必要があることはわかっていますが、キャッシング システムを使用せずにテストしたいと考えています。

負荷テストは、ユーザー ナビゲーションをシミュレートします。5 人のユーザーから始まり、1 分ごとに別のユーザーが追加されます。ユーザーが 25 人を超えると、ログにエラーが表示されるようになります。

最初は、開いている接続が多すぎるという問題があるのではないかと考えていましたが、システム管理者はそうではないと言っています.

ですので、どこを見ればいいのかヒントをいただけると助かります。

編集: 私たちの開発マシンには 16 個のコアがあり、クラスター モジュールを使用してアプリケーションを実行しています。バックエンドへの呼び出しは、人気のある Mikael のリクエスト モジュールで処理されます。

4

2 に答える 2

2

robertklep が示唆したように、これは、あまりにも多くの発信接続を開くと、SO が仮想ポートを使い果たすという問題です。詳細な説明については、彼のリンクをたどってください。

記事にあるようにポートを増やしても、まだ問題が発生します。さらにグーグルで調べてみると、ガベージコレクターとノードネットワークオブジェクトの問題がわかりました。ガベージ コレクターを手動で処理するのは良い考えです (多数の発信接続が必要な場合)。この投稿をチェックしてください。

于 2013-06-08T10:23:43.670 に答える
0

プログラムの問題ではないことを確認した場合は、Linux システムの構成を変更してこの問題を解決できます。

[xxx@xxx~]$vim /etc/sysctl.conf

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

[xxx@xxx~]$sysctl -p

于 2014-03-17T09:10:09.383 に答える