我正在运行 OpsWorks 堆栈:
- 10 个 c3.2xlarge 实例跨 4 个可用区域运行。
- 每个实例上的 CPU 使用率都不会超过 5%。
- 每个实例都(通过 memcached 层)连接到 db.r3.8xlarge(32 vCPU、244 GiB RAM)RDS 实例。
- 数据库的 CPU 保持在 15-20% 之间。
- 每个 EC2 实例与 RDS 的设置连接数为 250(总共 2,500 个连接)。
- 每个实例的内存都在逐渐增加,但我认为这是一个单独的问题。
load_1
、、指标都非常高,为 0.9-1.0load_5
。load_10
- 活跃的并发用户连接(基于 3 分钟窗口)卡在 2500-3000 个连接之间。
我们尝试增加 RDS 实例大小,虽然它确实阻止了我们的 RDS 达到最大值,但我们试图找出为什么并发连接似乎被固定住。
ELB 中是否有一些设置限制连接?呼叫延迟确实很高。我只是想找出可能限制此速度的因素,因为所有硬件似乎都运行正常。
答案1
经过深入调查,结果发现,数据库运行了一个查询,order by rand()
该查询涉及表中几乎全部 130 万条记录。修复这个查询后,性能下降到正常水平。