gpt4 book ai didi

PHP-FPM 性能调优——突发流量

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:24 25 4
gpt4 key购买 nike

我有一个用 Laravel/PHP 编写的 Web 应用程序,处于早期阶段,通常服务于 500 - 600 请求/分钟。我们使用 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 worker?

4) 是否有任何我们应该考虑的 FPM 性能调整?但是,我们使用 Opcache,我们是否应该切换到 FPM 的静态进程管理以减少进程旋转的开销?

最佳答案

相对于核心数量,子进程太多。

首先,您需要了解服务器在正常突发时间的状态。

1) 查看php-fpm进程数

ps -ef | grep 'php-fpm: pool' | wc -l

2) 检查平均负载。在 2 个核心时,2 个或更多意味着工作开始延迟。

top
htop
glances

3)根据服务的不同,我们从两倍的核心数开始调整。

; Example
;pm.max_children = 120 ; normal) pool 5, load 0.1 / burst) pool 120, load 5 **Bad**
;pm.max_children = 4 ; normal) pool 4, load 0.1 / burst) pool 4, load 1
pm.max_children = 8 ; normal) pool 6, load 0.1 / burst) pool 8, load 2 **Good**

load 2 = Maximum Performance 2 cores


通过apache benchmark(ab)来测试负载与实际负载相近的web服务器是比较准确的。

ab -c100 -n10000 http://example.com

Time taken for tests: 60.344 seconds
Requests per second: 165.72 [#/sec] (mean)
100% 880 (longest request)

关于PHP-FPM 性能调优——突发流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55273761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com