Apache 实例负载测试时出现 504 网关超时

Apache 实例负载测试时出现 504 网关超时

我有一个通过 Apache 实例部署的 Laravel 应用程序,实例配置如下,

T3A.2xLarge  (vCPU = 4, Memory 16 GIB)

我已将 apache 超时增加到 600 秒,配置mpm_prefork如下,

    <IfModule mpm_prefork_module>
            StartServers            16
            MinSpareServers         0
            MaxSpareServers         0
            MaxClients              16
            ServerLimit             256
            MaxRequestWorkers       400
            MaxConnectionsPerChild  25
    </IfModule>

我还根据情况更改了 PHP 配置。

RDS DB 的 max_connection 为 600,因此我将 maxRequestWorker 配置为 400 到 600,否则会出现错误Too Many Connection

但是,随着此配置,当我们在每 20 个 Ramp up 周期对 3000 个用户进行负载测试时,504 Gateway Timeout一半的请求会出现错误。

但是当我看到其他工具和错误日志时,它不会记录任何错误

关于配置有什么建议吗?

答案1

发现这个特定错误是您进行负载测试的 90% 原因。

鉴于您是在 AWS 上执行此操作,我假设您正在使用应用程序负载均衡器。 504通常是应用程序响应不够快并且负载均衡器放弃的结果。

您不太可能获得解释导致此问题的原因的日志。应用服务器很可能认为一切都还好,只是负载均衡器放弃了等待。

我相信连接空闲超时会影响负载均衡器的超时。默认值为 60(远高于您在服务器上设置的 600)。但请注意,让用户等待那么长时间是一种非常糟糕的体验。

否则你需要调查为什么服务器运行得这么慢。您需要寻找减慢服务器响应速度的瓶颈。可能有不止一个。这可能是:

  • 缺乏系统资源:CPU 和/或内存
  • 磁盘 IO - 特别是如果您使用 GP2 EBS - 请改用 GP3
  • 下游问题,例如 RDS 响应缓慢 - 查找 RDS 中的资源问题等。
  • 锁定问题。例如,如果应用程序正在更新数据库,则可能所有客户端都在竞争。这可能需要修复该应用程序。

相关内容