最近继承了一台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。