我有一台CentOS服务器。系统是nginx / php-fpm。它有16GB RAM。 CPU:8
CPU频率:2660.203 MHz
为什么我在错误日志中收到此错误?
php-fpm / error.log :
[02-Aug-2014 17:14:04]警告:[pool 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
如何解决问题?
答案 0 :(得分:81)
这是一个艰难的cookie,因为可能涉及众多因素。配置的第一个问题是max_children非常高。如果每个子进程使用50MB,那么50 x 32768很容易耗尽16GB。
确定max_children的一个更好的方法是找出每个子进程使用了多少,然后考虑你想要php-fpm使用的最大RAM,然后除以值。例如。如果我有一个16GB的服务器,我可以运行以下命令来确定每个php-fpm孩子消耗多少ram:
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个孩子来记录我的记忆消耗。
现在,关于服务器,您需要将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更改为按需。
这是一般指导原则,您的设置可能需要进一步调整。实际上是使用设置和运行基准测试来获得最佳性能和最佳资源使用情况。这有点单调乏味,但它是确定这些类型设置的最佳方式,因为每个设置都不同。