Azure 应用程序网关在进行 JMeter 负载测试时随机遇到 504 网关超时

问题描述 投票:0回答:3

我有 1 个应用程序网关,它有 2 个后端(Azure VM),它通过 IIS 托管 ASP CORE REST API。两者都使用端口 80 进行通信。

手动测试一切正常,直到我们使用 jmeter 进行 2500 线程 POST 请求负载测试时,某些请求得到“504 gateway timeout”作为响应。

我尝试对后端运行完全相同的负载测试,但没有收到任何不良响应。

我的应用程序网关是否配置错误?

配置

HTTP 设置

探针

azure jmeter azure-application-gateway
3个回答
4
投票

默认情况下,当请求时间超过 20 秒时,Azure 应用程序网关会返回 504 错误。 在我看来,这个随机 504 错误的解释是系统过载过高。 可能的解决方案是增加该时间,或提高性能或后端,或并行执行少量请求。


0
投票

我相信您需要联系Azure支持以了解当负载超过某个点时生成的错误日志。


0
投票

我相信我在 Azure Web 网关中发现了一个错误。

我发现有两种方法可以得到 504 错误。

  1. 您的网页请求时间超过了后端配置的请求超时时间。
  2. 我认为这是 Web 网关过快重用 Windows 套接字的错误。

在 #2 上,您可以针对 Web 网关的监控日志运行以下命令:

Azure诊断 |其中 timeTaken_d > 55 且 httpStatus_d 在 (504) 中 |拿400

如果您看到很多东西在 60 秒左右抛出 504,则可能是这个问题。

当我在端口 443(我们为您使用 ssl.. 端口 80)上运行 Wireshark 跟踪以获取后端池入站 IP 地址时,我然后针对捕获运行以下显示过滤器:

tcp.analysis.retransmission 和 tcp.flags.syn == 1

Syn Retransmissions

您将看到同一 Windows 套接字/ TCP 流的大量重传。您采取至少重新传输 2-3 次的其中之一,并针对客户端端口运行此显示过滤器:

tcp.端口== < client side port >

Port Reuse

您将看到一次对话以 fin 和 ack 等结束。或者可能是 rst 和 ack。不管怎样,谈话结束了。

此时,Web 服务器的套接字将进入时间等待状态,通常持续 60-240 秒,具体取决于操作系统等。通常是最大段长度的 2 倍。

但是 Web 网关正尝试在 < 30 seconds.. in my specific example I have seen as low as 22 seconds. It probably does not wait at all? The web server will ignore the syn packets b/c it is waiting to see if something comes over from the previous conversation. The is part of the standard and the gateway is ignoring it.

中重用该端口

我可以查看网关是否存在端口耗尽问题,但我运行以下命令:

netstat -ano |查找str /i |找到“TCP”/c

我有大约 300 个连接。应该有 1000 个端口中的 10 个可用,并且它试图在 20 秒左右的时间内重用以前的端口?不遵循任何标准,甚至是他们自己的 Windows 标准。

最后发生的事情是它不断重试 syn,Web Gateway 在不可配置的 60 秒处放弃并发送 504 错误。

您可以在 iis Web 服务器的注册表中将等待延迟时间减少到 30 秒以上,然后重新启动。

https://learn.microsoft.com/en-us/biztalk/technical-guides/settings-that-can-be-modified-to-improve-network-performance

这可能会消除 504 错误,但如果网关尝试在 30 秒之前进行连接,速度仍然会很慢。例如,FIN 连接在时间 0 秒结束。在 20 秒时,网关开始重用。您将在以下时间重试: 几毫秒 1秒 3秒 7秒

总共大约 11 秒,还有一些变化。在此期间,您的用户正在等待网络请求返回。如果呼叫通常需要 100 毫秒,那么它只需要 11 秒,再加上 100 毫秒。

如果网关尝试在 1-2 秒内使用该端口,则下一次重试将在 15 秒左右。这将为您提供 504,表示请求超时默认为 20 秒,或者如果您设置更高的值,则会延长您的超时时间。大约22秒后打电话。

希望我们能找到解决这个问题的方法。我现在有一个案件正在审理中。

© www.soinside.com 2019 - 2024. All rights reserved.