我有一个CentOS服务器.系统是nginx/php-fpm.它有16GB RAM.CPU:8
CPU频率:2660.203 MHz
为什么我的错误日志中出现此错误?
php-fpm/error.log:
[02-Aug-2014 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
如何解决问题?
Rij*_*ael 91
这是一个艰难的cookie,因为可能涉及许多因素.配置的第一个问题是max_children非常高.如果每个子进程使用50MB,那么50 x 32768很容易耗尽16GB.
确定max_children的更好方法是找出每个子进程使用了多少,然后考虑你想要php-fpm使用的最大RAM,然后除以值.例如,如果我有一个16GB的服务器,我可以运行以下命令来确定每个php-fpm子项消耗多少ram:
ps -ylC php-fpm --sort:rss
Run Code Online (Sandbox Code Playgroud)
注意!如果php-fpm在不同的下运行,则可能需要显式指定用户.
Run Code Online (Sandbox Code Playgroud)ps -ylC php-fpm --sort:rss -u www-data其中www-data是运行php-fpm的用户.
您正在寻找RSS专栏; 它表示驻留内存并以KB为单位.如果我每个进程平均有50MB,并且我想在php-fpm进程中使用最大10GB,那么我所做的只是10000MB\50MB = 200.所以,在此基础上,我可以使用200个孩子来表示我的记忆消耗量.
现在,关于服务器,您需要将max_spare_servers设置为x2或x4核心数.因此,如果您有一个8核CPU,那么您可以从max_spare_servers的值16开始,然后上升到32.
start_servers值应该是max_spare_servers值的一半左右.
您还应该考虑将max_requests丢弃到500左右.
此外,除了动态之外,pm值还可以设置为静态或按需.静态将始终在任何给定时间运行固定数量的服务器.如果您拥有一致数量的用户,或者您希望保证不会超出最大内存,那么这很好.按需只会在需要时启动进程.缺点显然是必须不断启动/终止进程,这通常会导致请求处理的延迟很小.好处是,您只需在需要时使用资源."动态"始终启动在start_servers选项中指定的X数量的服务器,并根据需要创建其他进程.
如果您仍然遇到内存问题,请考虑将pm更改为按需.
这是一般指导原则,您的设置可能需要进一步调整.实际上是使用设置和运行基准测试来获得最佳性能和最佳资源使用情况.这有点单调乏味,但这是确定这些类型设置的最佳方法,因为每个设置都不同.