我正在使用 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
好的,我认为我遇到了几个问题:
当我最初创建数据库时,我创建了 t2.micros,默认情况下它只允许一次建立 40 个连接。后来我将实例更改为 t2.mediums,但 max_connections 似乎保持不变。我在 t2.mediums 重新创建了数据库,现在 max_connections 为 90,如果需要,我可以重新创建。
我误读了 Locust 文档,我将测试设置为每 90 毫秒访问一次网站,因此每 0.09 秒访问一次,这太长了。我只是将访问时间增加到 3-10 秒(实际秒数),现在服务器运行良好。
但是,将 Locust 用户数增加到 200 会导致 75% 的失败率(数据库断开连接),但我认为我可以进一步调整 max_connections,或者在网站前面放置一个 CDN(无论如何我都会这样做)
@michael-sqlbot 在这里获得了奖励,他引导我走上了正确的道路。