【发布时间】:2020-07-03 22:12:36
【问题描述】:
我在 Azure 中运行一个虚拟机,我在该虚拟机上有一个服务,可以进行大量传出 http 客户端调用。一段时间后(大约 10 分钟),当服务进行了大约 5000-10000 次调用时,它突然开始收到 Connection Refused 作为对请求的响应。
在本地运行相同的服务时(在许多环境和计算机中尝试过),它运行时不会出现任何错误。我们正在为请求使用 HttpClient 类。 这些请求在同时运行的 3 个任务中完成。
我应该注意 Azure 中的传出连接数量有一些限制吗?
【问题讨论】:
-
您确定没有正确处理 HttpClient 不会导致任何线程饥饿吗?您使用的 VM 大小是多少?与至少有 4 个核心的本地 PC 相比,我怀疑 Small(有 1 个核心和 1.75GB 内存)?谢谢。
-
似乎不是我们的代码。当我们运行服务并在 VM 上出现错误时,我在 VM 上打开了 chrome 并尝试从那里调用 REST 并得到相同的错误......所以这似乎是机器/基础设施问题,而不是代码本身。
-
如果它是一个端口/线程饥饿,那么无论您如何访问 Http 堆栈,您仍然会有相同的行为。我们对并发 TCP 连接的限制是 500K。我能想象的唯一另一件事是你触发了一些 DDoS 警报,你会受到限制。要检查的事情是: 1)你当时有足够的BW吗? 2) 你有足够的线程可用 3) 尝试不同的角色大小,看看它的行为是否相同。然后它证实了我的 DDoS 理论。如果没有,那就是别的东西了。
-
好的。谢谢会检查它。在我们本地网络上的虚拟机上尝试使用完全相同的配置访问远程主机(这不是我们的)并且它可以工作......但是 Azure 中的同一个虚拟机出现错误......所以这表明它不会是线程问题吧?
-
本地机器的规格是否与您在 Azure 上使用的规格相同?如果是,那么这不是线程问题。如果不是,这可能仍然是一个正当的理由。可能不是原因,但仍有待研究。
标签: azure