2

C# TCP 非同期ソケット サーバーがあります。

ローカルでテストしたところ、35 秒で 5K の接続を受け入れることができました。クアッド コア ハイパー スレッド PC (8 スレッド) を実行していますが、使用率は各コアで ~20 ~ 40% です。接続が受け入れられると、サーバーはクライアントに一連のデータを要求し、一連のデータベース エントリとして実行します。

サーバー アプリケーションと SQL データベースを、Amazon AWS の小規模なデータベースと中規模のサーバー インスタンスに移動しました。

Amazon Medium サーバー (EC2) は、1 つの仮想コアと 2 つの ECU です。私が言えることから、スレッドは1つしかありません。(パフォーマンスモニターから)

中規模サーバーに 35 秒間で 1000 クライアントを接続しようとすると、. 〜650回の接続の後、接続に失敗しました(b)ターゲットマシンが積極的に拒否したため、接続できませんでした

パフォーマンス モニターを見ると、CPU 使用率が 10 ~ 15% しかないことに気付きました。

サーバーには仮想コアが1つしかないため、小さな操作の接続の巨大なキューを処理しようとしており、CPU使用率を増加させるのに十分な負荷を提供しないため、コアがロードされていないと推測しています。

誰もこれについて何か経験がありますか、私の理論は理にかなっていますか? ハードウェアの制限で立ち往生していますか? (サーバーのサイズを大きくする必要がありますか?)

そうでない場合、使用率を高め、より多くの/より速い接続をサポートする方法はありますか?

誰もこれを経験していますか?

編集:

Amazon EC2 のインスタンスを High CPU Extra Large インスタンスにアップグレードしました。

インスタンスには現在、8 つのコアと 20 の ECU があります。

私は同じ問題を経験しています.600回の接続後、ターゲットマシンがアクティブに拒否したため、接続できませんでした.

4

3 に答える 3

1

アマゾンサーバーがその数のオープンTCP接続を許可するように設定されているかどうかを確認します。Windowsでは、最大許可TCP接続のレジストリエントリを追加して、接続を許可するようにサーバーを設定する必要があります。

于 2012-09-05T18:52:06.303 に答える
0

この問題を修正できました。PIOPS を使用するようにインスタンスをアップグレードしました。また、以前のアップロード速度が遅すぎてすべてのデータと接続の送信をサポートできなかったため、より良いインターネット接続をローカルで使用しました。

これら 2 つの変更により、ローカルで 5K 以上の TCP 接続を作成し、問題なくサーバーに接続できます。

于 2012-10-19T20:33:21.590 に答える
0

ローカルで実行している間、コードは複数のコアを利用しているようです。シングル コアに移行する際に、コードに変更を加えましたか? ダミーのユーザー作成をテストし、プログラムで同時にアプリケーションにアクセスさせたときに、アプリケーションで同様のケースを見てきました。特定の数の後、接続が切断されたり、アクセスできなくなったりしていました。

要件が使用率の高いものである場合は、より高い構成の EC2 を使用して予約済みインスタンスを取得できます (長期間使用する場合)。これには非常に経済的な費用がかかる可能性があります。また、cloudfront 、 loadbalancer (インスタンスが 2 つ以上ある場合) を使用してみてください。彼らは間違いなくあなたが現在処理できるユーザーの数を改善します. それが役に立てば幸い。

于 2012-08-29T18:14:48.330 に答える