我有一个通过 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 中的资源问题等。
- 锁定问题。例如,如果应用程序正在更新数据库,则可能所有客户端都在竞争。这可能需要修复该应用程序。