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回の接続後、ターゲットマシンがアクティブに拒否したため、接続できませんでした.