【问题标题】:PHP-FPM performance tuning - bursts of trafficPHP-FPM 性能调优——突发流量
【发布时间】: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


【解决方案1】:

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

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

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**

负载 2 = 最大性能 2 个核心


通过 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)

【讨论】:

  • 这是不错的建议。 120 个进程可能很多。从核心数量开始,逐个扩展测试直到一切都停止是一个不错的优化策略。
  • 感谢您的回答!我只是想澄清一下:我有 125 台最大服务器,25 台启动服务器。在爆发期间,我们在其中一个盒子上获得的第一个 PHP 日志是:[pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 32 total children
  • 另外,当你说 Check the load average. At 2 cores, 2 or more means that the work's starting delayed. 时。你的意思是,检查 CPU 使用率?
  • “CPU 使用率”和“平均负载”不同。 tecmint.com/…
猜你喜欢
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 2015-02-07
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多