我在Azure中托管了我的AspNetCore应用程序(,P3v2计划)。它在正常负载(5-10次请求/秒)下工作非常好,但在高负载(100-200次请求/秒)下开始挂起,请求返回以下响应:
The specified CGI application encountered an error and the server terminated the process.从事件日志中,我可以获得更多的细节:
An attempt was made to access a socket in a way forbidden by its access permissions aaa.bbb.ccc.ddd我必须将实例数量缩小到30个实例,虽然每个实例每秒只有3到5个请求,但它工作得很好。我相信,30个主机太多了,无法处理这么高的负载,无法充分利用资源,并试图找到真正的瓶颈。如果我将实例计数设置为10 -所有的操作都会崩溃,并且每个请求都会开始返回上面的错误。启用30个实例的高负载情况下的资源利用率指标:
我在当前的层限制中发现了这篇有用的文章,在Azure连接诊断之后,我发现了一些可能的问题:
因此,我挖掘了更多的信息,并发现了以下信息:



根据我的服务计划层,我的tcp连接限制应该是8064,这与上面显示的很远。接下来,我检查了套接字状态:

尽管我看到活动TCP连接的数量低于限制,但我想知道打开的套接字句柄计数是否是一个问题。是什么导致这个套接字句柄泄漏(如果有的话)?如何排除和调试它?
发布于 2019-12-26 10:52:16
我看到您试图隔离错误的可能原因,只是突出了重新验证/补救的一些原因:
1-在Azure App Service上--连接到本地地址(例如localhost,127.0.0.1)和机器自己的IP将失败,除非同一沙箱中的另一个进程在目标端口上创建了侦听套接字。拒绝连接尝试,通常返回上述套接字禁止错误(上面)。对于对等的VNet/On_pre前提,请确保所使用的IP地址在所列用于路由到VNet/不正确路由的范围内。
2.在Azure App服务上--如果VM实例上的出站TCP连接已经耗尽。限制是针对每个VM实例可以创建的最大出站连接数而强制执行的。
本博客中突出显示的其他原因
如果您已经尝试过来获取更多的详细信息,那么我很不习惯,请尝试一下:
导航到Azure门户中的诊断和解决问题刀片。
考虑优化应用程序以实现.NET的连接池/在本地观察行为。如果可行,重新启动WebApp,然后检查这是否有帮助。如果问题仍然存在,请提交一张支持票,以便对后端日志进行详细/深入的调查。
https://stackoverflow.com/questions/59401286
复制相似问题