我有一个 C# TCP 异步套接字服务器。
在本地测试,我可以在 35 秒内接受 5K 连接。我正在运行四核超线程 PC(8 个线程),每个内核的利用率约为 20-40%。当连接被接受时,服务器向客户端询问一堆数据,然后执行一堆数据库条目。
我将服务器应用程序和 SQL 数据库移至 Amazon AWS 上的小型数据库和中型服务器实例。
Amazon 中型服务器 (EC2) 是 1 个虚拟核心和 2 个 ECU。据我所知,它只有 1 个线程。(来自性能监视器)
如果我尝试在 35 秒内将 1000 个客户端连接到中型服务器。大约 650 个连接后,我开始接收Connect failed(b) No connection could be made because the target machine positively拒绝它。
查看性能监视器,我注意到 CPU 利用率只有 ~10-15%。
我猜核心没有被加载,因为它试图处理大量的连接队列、小型操作并且没有提供足够的负载来增加 CPU 使用率,因为服务器只有 1 个虚拟核心。
有没有人有这方面的经验,我的理论有意义吗?我陷入了硬件限制?(需要增加服务器大小?)
如果没有,有什么想法可以提高利用率并支持更多/更快的连接吗?
有人对此有经验吗?
编辑:
我将我在 Amazon EC2 上的实例升级到了 High CPU Extra Large 实例。
该实例现在有 8 个内核和 20 个 ECU。
我遇到了同样的问题,我得到 No connection could be made 因为目标机器在 ~600 个连接后主动拒绝了它。