我有一个用 Laravel / PHP 编写的 Web 应用程序,目前处于早期阶段,通常用于500 - 600 请求/分钟。我们使用 Maria DB 和 Redis 进行缓存,所有内容都在 AWS 上。
对于我们想在平台上推广的活动,我们会向所有用户发送推送通知(移动平台),这会导致大约 2 分钟的流量爆发,将我们带到3.5k 请求/分钟
在我们目前的服务器规模下,这完全拖垮了应用服务器的 CPU,其运行速度通常约为10% 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 的静态进程管理,以减少进程启动和关闭的开销?