Azure 应用服务 TCP/IP 端口耗尽问题

5
最近我从Azure收到了一份与App Service中TCP/IP端口上限相关的“建议”。引用如下:
TCP/IP端口接近枯竭,您的应用服务计划包含的应用******配置为使用中型实例。托管在该应用服务计划中的应用程序正在使用超过每个中型实例可用的4096个TCP/IP端口的90%以上。您可以升级实例大小以增加出站连接限制,或者配置连接池以更高效地使用。
有什么关于“App Service计划限制”(升级规模)的区别吗?还是我可以“配置我的App Service”来使用更多的端口?还是有其他解决办法?
一个显而易见的解决方案是扩展规模,但由于CPU和内存使用率低,如果没有必要,我不想使用此选项。
背景介绍:该服务是使用.Net 4.6构建的ASP.NET Core MVC API。

你在调用什么东西,以至于你有这么多的已建立的出站连接?你确定你没有在某个地方泄漏连接吗? - evilSnobu
您说得对,我不应该有那么多开放的连接。我每秒大约有100个调用(这是一个API),所以我不确定为什么会有这么多。我启动了很多到其他服务(Cassandra、MSSQL、RabbitMQ等)的连接,但我不确定这些连接数量是否正确。而且我认为使用的库应该非常有效,因为我在可能的情况下小心地使用单例模式。 - Fischer
2个回答

4

是的,应用服务计划(扩展)的限制有所不同:

最大连接数如下:

B1/S1/P1 实例每个可以有1,920个连接; B2/S2/P2 实例每个可以有3,968个连接; B3/S3/P3 实例每个可以有8,064个连接。

关于其他服务(如Cassandra、MSSQL、RabbitMQ等),但我不确定这些连接数量是否也适用于这些服务。 这些服务调用也会导致TCP连接创建,因此需要进行计数。

Azure中的大多数服务都具有自己的诊断和仪表板,在进行调试时我们可以进行相关性比较,例如在我的情况下,MSSQL DTU不足以容纳并发请求的数量,因此连接正在积累。

来源:

https://blogs.technet.microsoft.com/latam/2015/06/01/how-to-deal-with-the-limits-of-azure-sql-database-maximum-logins/

https://blogs.msdn.microsoft.com/appserviceteam/2018/03/01/deep-dive-into-tcp-connections-in-app-service-diagnostics/


这些指标不是与“出站连接”相关的吗 - 我认为这与OP的问题没有任何关系。 - tigerprawn

1
通常我们在.NET中进行调用后实例化和释放,但对于HttpClient类来说有一个需要注意的地方,即应该在应用程序的整个生命周期内重复使用同一类。
Azure端口在其计算环境中是有限制的,因此与标准服务器相比,您会更早地遇到这种情况。
请阅读以下内容: 重用HttpClient

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接