【发布时间】:2019-03-21 04:22:34
【问题描述】:
我有一个用 Laravel / PHP 编写的 Web 应用程序,它处于早期阶段,通常服务于 500 - 600 reqs/min。我们使用 Maria DB 和 Redis 进行缓存,一切都在 AWS 上。
对于我们想在我们的平台上推广的活动,我们会向所有用户发送推送通知(移动平台),这会导致大约 2 分钟长的流量突发,使我们达到 3.5k 请求/分钟
在我们目前的服务器规模上,这完全拖累了通常以 10% CPU 运行的应用程序服务器的 CPU。在这次爆发期间,数据库和 Redis 集群看起来还不错。
查看日志,似乎所有 PHP-FPM 工作池进程都被占用并开始排队来自 Nginx 上游的请求。
我们目前有:
三个 m4.large 服务器(2 个内核,每个 8gb RAM)
动态 PHP-FPM 进程管理,每个盒子上最多有 120 个子进程(服务器)
我的问题:
1) 我们应该增加 FPM 池吗?看来,就记忆而言,我们可能已经接近我们的极限了
2) 我们应该减少 FPM 池吗?似乎我们正在启动如此多的进程,以至于 CPU 陷入困境并且无法真正完成其中的任何一个。我想知道我们是否会因此用更少的钱获得更好的结果。
3) 我们是否应该简单地使用具有更多 RAM 和 CPU 的更大盒子,这将允许我们添加更多 FPM 工作人员?
4) 是否有任何我们应该考虑的 FPM 性能调整?但是,我们使用 Opcache,是否应该切换到 FPM 的静态进程管理来减少进程上下旋转的开销?
【问题讨论】:
-
您可以调整任何低效的代码吗?
-
@Reed 在这一点上我们已经尽可能地优化,这就是我们评估 fpm 方面的原因
-
您可以随时增加池大小,至少在促销发生之前是暂时的,您还可以将更多服务器添加到您的扩展组,或启用自动扩展(如果突发不快于速率AWS 可以启动实例)
标签: php laravel performance