![PHP-FPM 在具有 16 个线程的服务器上使用 100% 的 CPU](https://linux22.com/image/764092/PHP-FPM%20%E5%9C%A8%E5%85%B7%E6%9C%89%2016%20%E4%B8%AA%E7%BA%BF%E7%A8%8B%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E4%BD%BF%E7%94%A8%20100%EF%BC%85%20%E7%9A%84%20CPU.png)
我有一台拥有 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
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/