在 AWS 流量大的情况下丢失数据库连接 - 不确定从哪里开始排除故障

在 AWS 流量大的情况下丢失数据库连接 - 不确定从哪里开始排除故障

我正在使用 Elastic Beanstalk 在 AWS 上设计一个高可用性 WP 网站,并使用 Locust 测试使用负载。

一切看起来都很好:我的 EC2 是 t2.mediums,自动扩展到 3-6 个可用区。负载均衡器设置为“跨区域”负载平衡(因此流量应分布到 3 个不同区域中的 3 台服务器),我正在使用具有主->只读副本设置的 Aurora (db.t2.medium)。

当我通过浏览器访问该网站时,一切都很好,但是一旦我启动 Locust(有 100-500 个用户,等待时间为 90-100 秒,用户孵化率为 10),我的网站几乎会立即失去与数据库的连接并最终抛出 50x 错误。

我的 Apache/PHP 设置是从 Beanstalk(Amazon Linux AMI,php 5.6)开始的,规格如下。opcache 默认启用,但当前未安装 phpfpm。

下面是我的设置图表,然后是规格:

图像

  • EC2
    • 3 t2.媒介
    • 2 个 vCPU
    • 24 CPU 积分/小时
    • 4G内存
  • Apache 2.4
  • PHP 5.6
    • 上传最大文件大小 => 64M
    • post_max_size => 64M
    • 最大执行时间 => 120
    • 内存限制 => 256M
    • 操作缓存
    • opcache.enable=1
    • opcache.memory_consumption=128
    • opcache.interned_strings_buffer=8
    • opcache.max_accelerated_files=4000

我不确定这是否是硬件配置问题,或者我是否需要调整 PHP/Apache/MySql

答案1

好的,我认为我遇到了几个问题:

  1. 当我最初创建数据库时,我创建了 t2.micros,默认情况下它只允许一次建立 40 个连接。后来我将实例更改为 t2.mediums,但 max_connections 似乎保持不变。我在 t2.mediums 重新创建了数据库,现在 max_connections 为 90,如果需要,我可以重新创建。

  2. 我误读了 Locust 文档,我将测试设置为每 90 毫秒访问一次网站,因此每 0.09 秒访问一次,这太长了。我只是将访问时间增加到 3-10 秒(实际秒数),现在服务器运行良好。

但是,将 Locust 用户数增加到 200 会导致 75% 的失败率(数据库断开连接),但我认为我可以进一步调整 max_connections,或者在网站前面放置一个 CDN(无论如何我都会这样做)

@michael-sqlbot 在这里获得了奖励,他引导我走上了正确的道路。

相关内容