这是一个坚韧的饼干,因为可能涉及许多因素。你的配置的第一个问题是高得离谱。如果每个子进程使用50MB,那么50 x 32768将很容易耗尽16GB。max_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开始,直到32。max_spare_servers
max_spare_servers
该值应约为该值的一半。start_servers
max_spare_servers
您还应该考虑将值降至500左右。max_requests
此外,除了 之外,该值还可以设置为 或 。dynamic
pm
static
ondemand
-
static
在任何给定时间始终运行固定数量的服务器。如果您有一致的用户数量,或者您想保证不会超出最大内存,这很好。
-
ondemand
仅当需要时才启动进程。缺点显然是必须不断启动/终止进程,这通常会导致请求处理中的非常轻微的延迟。好处是,您只在需要时使用资源。
-
dynamic
始终启动选项中指定的 X 数量的服务器,并根据需要创建其他进程。start_servers
如果仍然遇到内存问题,请考虑更改为 。pm
ondemand
这是一般准则,您的设置可能需要进一步调整。这实际上是一个使用设置并运行基准测试以获得最大性能和最佳资源利用率的情况。这有点乏味,但这是确定这些类型设置的最佳方法,因为每个设置都是不同的。