PHP-FPM 在具有 16 个线程的服务器上使用 100% 的 CPU

PHP-FPM 在具有 16 个线程的服务器上使用 100% 的 CPU

我有一台拥有 32 GB RAM 和 16 个线程的服务器。该服务器有一个 PHP API,它会接收来自其他外部 API 的许多请求,我在 PHP-FPM 中进行了配置以支持所有这些请求而不会减慢网站速度,这种方法运行良好,已经运行了 1 年,现在请求几乎翻了一番,这导致网站页面加载速度很慢,需要 5-6 秒才能加载,这是不正常的。也许我必须在 PHP-FPM 中重新进行配置以支持这种新的请求需求,在这种情况下你会怎么做?

我的服务器有 32 GB 的 RAM,但只使用了 2.5 GB,这样可以吗?是否可以在 RAM 和 CPU 之间保持平衡以提高 CPU 性能,还是我在胡说八道?

pm.max_children = 32
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 1000

htop 命令输出 顶部

PHP-FPM 共有 32 个子进程正在运行。

答案1

我将使用 php-fpm 设置pm = 静态. 根据我的经验,高流量网站使用 pm static 比使用动态/ondemand 效果更好。

您可以使用以下命令了解 php-fpm 进程使用的内存:

ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

我会用类似这样的方式修改 php-fpm 配置:

pm.max_children = 25
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 1000

之后重新启动 php-fpm!

顺便说一句,这里有一篇非常有趣的文章,可以解释很多内容并指导您找到最佳配置: https://thisinterestsme.com/php-fpm-settings/

相关内容