首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在高负载下,Azure AspNetCore WebApp返回“指定的CGI应用程序遇到错误并服务器终止进程”。

在高负载下,Azure AspNetCore WebApp返回“指定的CGI应用程序遇到错误并服务器终止进程”。
EN

Stack Overflow用户
提问于 2019-12-18 23:16:22
回答 1查看 1.8K关注 0票数 0

我在Azure中托管了我的AspNetCore应用程序(,P3v2计划)。它在正常负载(5-10次请求/秒)下工作非常好,但在高负载(100-200次请求/秒)下开始挂起,请求返回以下响应:

代码语言:javascript
复制
The specified CGI application encountered an error and the server terminated the process.

从事件日志中,我可以获得更多的细节:

代码语言:javascript
复制
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个实例的高负载情况下的资源利用率指标:

  • 服务计划CPU使用率较低,每台主机约占10-15%。
  • 服务计划内存使用量约为30-40%。
  • 依赖性响应快,50-200毫秒
  • Azure SQL DTU的使用率约为5%。

我在当前的层限制中发现了这篇有用的文章,在Azure连接诊断之后,我发现了一些可能的问题:

  1. 高出站TCP连接
  2. 高TCP套接字句柄计数-在实例上检测到高TCP套接字句柄计数.在此期间,现场的过程dotnet.exe .使用ProcessId 8144的最大打开句柄数为17004。

因此,我挖掘了更多的信息,并发现了以下信息:

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

尽管我看到活动TCP连接的数量低于限制,但我想知道打开的套接字句柄计数是否是一个问题。是什么导致这个套接字句柄泄漏(如果有的话)?如何排除和调试它?

EN

回答 1

Stack Overflow用户

发布于 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实例可以创建的最大出站连接数而强制执行的。

博客中突出显示的其他原因

  • 使用未实现的客户端库重用TCP连接。
  • 应用程序代码或客户端库正在泄漏TCP套接字句柄。
  • 一次打开太多TCP套接字连接的请求的突发负载。
  • 在HTTP这样的较高级别协议中,如果没有利用“保持活动”选项,就会遇到这种情况。

如果您已经尝试过来获取更多的详细信息,那么我很不习惯,请尝试一下:

导航到Azure门户中的诊断和解决问题刀片。

  1. 在Azure门户中,打开中的应用程序。
  2. 选择诊断和解决问题> "TCP连接“

考虑优化应用程序以实现.NET的连接池/在本地观察行为。如果可行,重新启动WebApp,然后检查这是否有帮助。如果问题仍然存在,请提交一张支持票,以便对后端日志进行详细/深入的调查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59401286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档