PHP5-FPM pm.max_children 影响 RAM 还是 CPU+RAM?

PHP5-FPM pm.max_children 影响 RAM 还是 CPU+RAM?

最近继承了一台Nginx+PHP5-FPM服务器,正在学习并尝试优化PHP5-FPM设置。

服务器信息:

4 CPUs (8 threads)
7.5 GiB RAM

PHP5-FPM信息:

pm.max_children = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 3
;pm.process_idle_time = 10s;
;pm.max_requests = 500

(我将取消注释 max_requests 行,因为这似乎是推荐的做法。)

当网站负载较高时,每个 PHP5-FPM 进程的 CPU 使用率都非常高,但我还没有看到任何一个进程的 RAM 使用率超过 1%。

我所看到的任何地方(例如这里这里) 只谈到pm.max_children受 RAM 限制的增加,并没有提到 CPU 使用率。

就我的情况而言,pm.max_children鉴于我的网站受 CPU 限制大于受 RAM 限制,增加网站性能会增加还是减少?换句话说,pm.max_children增加 RAM 是唯一的考虑因素还是 CPU 也会受到影响?

[编辑] 不是重复的:这个问题基本上可以归结为最后一句话,即不是询问有关容量规划的建议;它询问在 pm.max_children 设置中是否考虑了 CPU 使用率,或者是否仅仅增加了 RAM。

答案1

这取决于您的 PHP 脚本正在做什么。但5对于 PHP 进程来说,这个数字确实很低。通常,PHP 进程将打开与 MySQL 的连接(需要时间),等待 MySQL 处理查询(需要时间),因此它不会一直使用 CPU,并且只有 5 个进程,CPU 可能会在某些时候处于空闲状态,但没有其他 PHP 进程使用它。因此,您可以安全地将限制增加到至少 20-30(或更多,取决于您收到的请求数量)。

关于 CPU 使用率的问题。同时运行更多活跃的 PHP 进程不会增加 CPU 使用率。所有可用的 CPU 能力都将分配给正在运行的进程。

答案2

从我的角度来看,你的子进程限制太低了。如果你有足够的内存(并且每个子进程通常只消耗少量内存),那么子进程的数量至少应该设置为 cores*2。我建议将 max-children 设置为 32。

相关内容