警告:[池 www] 似乎很忙(您可能需要增加pm.start_servers,或 pm.min/max_spare_servers),生成 [已关闭]

2022-08-30 10:56:54

我有一台 CentOS 服务器。系统是nginx/php-fpm。它有16GB内存。处理器 : 8

处理器频率: 2660.203 MHz

为什么我在错误日志中收到此错误?

php-fpm/error.log

[2014年8月2日,17:14:04]警告:[池www]似乎很忙(您可能需要增加pm.start_servers,或pm.min/max_spare_servers),生成8个孩子,有0个闲置,总共21个孩子

这是我对 www 池的 php-fpm 配置:

php-fpm/www.conf

pm = 动态

pm.max_children = 32768

pm.start_servers = 10

pm.min_spare_servers = 10

pm.max_spare_servers = 10

pm.max_requests = 5000

如何解决问题?


答案 1

这是一个坚韧的饼干,因为可能涉及许多因素。你的配置的第一个问题是高得离谱。如果每个子进程使用50MB,那么50 x 32768将很容易耗尽16GBmax_children

确定的更好方法是找出每个子进程使用多少,然后考虑您希望php-fpm使用的最大RAM,然后除以值。例如,如果我有一个16GB的服务器,我可以运行以下命令来确定每个php-fpm子级消耗多少RAM:max_children

ps -ylC php-fpm --sort:rss

注意!可能需要显式指定用户,如果php-fpm在不同的下运行。

ps -ylC php-fpm --sort:rss -u www-data

其中 www-data 是运行 php-fpm 的用户。

您正在寻找RSS列;它声明驻留内存,并以 KB 为单位进行测量。如果我每个进程平均有50MB,并且我想为php-fpm进程使用最大10GB,那么我所做的就是10000MB \ 50MB = 200。因此,在此基础上,我可以使用200个孩子来消耗我所说的记忆。

现在,关于服务器,您需要将内核数设置为 x2 或 x4。因此,如果您有一个8核CPU,那么您可以从值16开始,直到32max_spare_serversmax_spare_servers

该值应约为该值的一半。start_serversmax_spare_servers

您还应该考虑将值降至500左右。max_requests

此外,除了 之外,该值还可以设置为 或 。dynamicpmstaticondemand

  • static在任何给定时间始终运行固定数量的服务器。如果您有一致的用户数量,或者您想保证不会超出最大内存,这很好。
  • ondemand仅当需要时才启动进程。缺点显然是必须不断启动/终止进程,这通常会导致请求处理中的非常轻微的延迟。好处是,您只在需要时使用资源。
  • dynamic始终启动选项中指定的 X 数量的服务器,并根据需要创建其他进程。start_servers

如果仍然遇到内存问题,请考虑更改为 。pmondemand

这是一般准则,您的设置可能需要进一步调整。这实际上是一个使用设置并运行基准测试以获得最大性能和最佳资源利用率的情况。这有点乏味,但这是确定这些类型设置的最佳方法,因为每个设置都是不同的。


答案 2

推荐