网站需要重新启动 php-fpm 才能加速

网站需要重新启动 php-fpm 才能加速

我遇到服务器响应时间的问题,当我重新启动 php FPM 时,网站加载速度很快,然后过一段时间又出现同样的情况,所以我不得不再次重新启动 fpm。

我更改了 pm_max_children、pm_max_requests、pm_min_spare_servers 设置,但没有任何作用。

请帮我解决这个问题。

现在 pm_max_children=600

答案1

几周前我遇到过类似的问题,我发现这篇关于 php-fpm 调整的文章很有用。可能值得仔细阅读其中的部分内容来检查您的设置。它计算了如何设置 PHP 进程的内存限制。https://medium.com/@richb_/tweaking-nginx-and-php-fpm-configuration-to-fix-502-bad-gateway-errors-and-optimise-performance-on-17465f41fd87

答案2

您的服务器有多少个核心和多少 RAM?在重新启动服务器之前,有多少个 PHP 进程以及“top”显示什么?

统计 php 进程数

ps -ef | grep php

计算顶部(编辑您的问题以复制并粘贴顶部的文本,格式化以便正确显示。前 4 或 5 行是最重要的)

top

我怀疑您试图使用比服务器更多的资源。PHP 可以使用大量内存 - 每个线程(子线程)100MB 或更多。如果您告诉它使用 600 个子线程,则可能要使用 60GB 的 RAM,因此您完全可以进行交换。

我有一个 EC2 t3.nano,它有 500MB 的 RAM 和 500MB 的交换空间,运行着 MySQL、PHP、Nginx 和其他一些东西。我设置了 pm.max_children = 4 。以下是我为负载很轻的服务器设置的动态 PHP 池的关键设置

pm = dynamic
pm.max_children = 4
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 2
; This next line restarts the PHP thread once it's serviced 100 threads - I have a buggy program
pm.max_requests = 100

我还有另一个 PHP 池,仅用于测试,这种情况很少见,因此默认没有多余的 PHP 进程

pm = ondemand
pm.max_children = 2
pm.process_idle_timeout = 120s;
pm.max_requests = 50

在我的 Nginx 配置中,我使用此命令将我的测试站点发送到 PHP 测试池

fastcgi_pass   php56-fpm-testpool;

建议

使用类似这样的配置来减少 RAM 使用量。这实际上取决于您的负载,您应该调整数字。

pm = dynamic
pm.max_children = 75
pm.start_servers = 25
pm.min_spare_servers = 10
pm.max_spare_servers = 20
pm.max_requests = 500

相关内容