设置:EC2 服务器在 ELB 后面自动扩展,连接到 RDS mysql 数据库,所有静态文件都从云端提供。
我在 EC2 服务器上运行 nginx 作为 Web 服务器,keepalive 设置为 20,工作进程 4,. Codeigniter 是后端并使用 codeigniter 会话。
我一直在运行许多基准测试来尝试测试性能、围攻、apache 基准测试、blitz.io。
我正在测试两个特定页面,第一个性能非常好,它使用 codeigniter 会话,因此会访问数据库以读取和更新 ci_sessions 数据库。第二页是我遇到问题的页面,它运行一个包含多个连接的查询,单个用户在大约 0.4 秒内完成。此查询已优化,我正在使用 InnoDB 表。在使用 c10 和 n1000 的 apache 基准测试下,100% 的请求会在 634 毫秒内返回。
当我运行并发用户 > 200 时,我开始遇到问题。添加更多 EC2 服务器无济于事,CPU 的利用率约为 50%。RDS 数据库监控还显示 CPU 和内存使用率低于 70%,平均 DB 连接数 < 35。
通过迁移到大型 RDS 实例和大型 EC2 实例提高了性能,这让我想知道 I/O 是否在这里发挥作用。
如果我在负载测试期间启动 ELB 之外的服务器并点击此页面,它会在不到一秒的时间内返回,但如果我在 ELB 内启动另一台服务器,它最多会保持 4 或 5 秒。这表明我没有超载 RDS。
我尝试用 5 分钟的爆发缓慢地增加 ELB,但这似乎没有帮助。
我想知道下一步该去哪里寻找这个问题,无论是某种 I/O 问题还是其他问题,因为 RDS 和 EC2 服务器似乎没有发挥它们的能力。任何建议或想法下一步将不胜感激