【问题标题】:How can I get a list of TCP connection statuses for an Azure App Service app?如何获取 Azure 应用服务应用的 TCP 连接状态列表?
【发布时间】:2018-10-15 15:22:18
【问题描述】:

我们有一个包含 20 多个应用程序的 Azure 应用服务计划。

其中一个应用程序导致端口耗尽。定价计划中的所有应用都会因此失去连接。

技术支持表明 TIME_WAIT 状态 TCP 连接在端口耗尽时占主导地位。为了帮助诊断和监控这种情况和未来情况,我需要一种获取每个应用程序的 TCP 连接和状态的通用方法。

这可能吗?如果有怎么办?

【问题讨论】:

  • IPGlobalProperties.GetActiveTcpConnections Method 可以返回 TCP 连接,但它不适用于 Azure 应用服务。而且 Kudu 调试控制台不允许我们运行netstat -n 命令来显示 TCP/IP 协议正在使用的活动连接。我怀疑目前它不能让我们获得每个应用程序的 TCP 连接。
  • 我认为这是一个缺陷。技术支持@MSFT 似乎也很难为我们的案件提供帮助。我不确定如何继续诊断端口耗尽的原因。
  • 同样的问题。我们有很多出站 TCP 连接,从我们的角度来看这是不正常的。如果能够诊断出确切的主机,那就太好了。

标签: azure tcp azure-web-app-service


【解决方案1】:

我知道这不是您问题的直接答案,但我们有一个类似的问题,并发现我们对 HttpClient 的使用是一个促成因素。如果您为每个 HTTP 请求使用新的 HttpClient 实例,则可能会耗尽可用的出站连接。我们发现以下文章对使用 HttpClient 最小化出站连接数非常有帮助:https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/

我们还希望有一种方法可以查看来自 Azure 应用服务的 TCP 连接,因为 Kudu 在尝试使用 netstat 时会显示“访问被拒绝”。

【讨论】:

  • 谢谢。我将整个问题视为 Azure PaaS 中的设计疏忽。所有其他资源使用都可能导致自动缩放或警报。两者的端口消耗都处理不好
【解决方案2】:

现在这是一个流行的问题。为了补充一些额外的信息,调查的结果是一个应用程序正在使用一个存在某种错误的 MySQL 客户端库。它没有正确关闭 TCP 端口。这扼杀了整个计划。在与 Azure 技术支持人员交谈后,他们同意应该改进 Azure 门户中的 TCP 连接报告。从那以后,我没有检查是否有任何改进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多