PHP-FPM 占用内存并创建许多池

PHP-FPM 占用内存并创建许多池

我使用 php-fpm 设置了我的 nginx。每个 vhost 都有自己的 unix-socket 和单独的 POOL。
但问题是 php-fpm 为我在中创建的每个配置池创建了 7 个线程/etc/php5/fpm/pool.d/

为什么?我如何定义仅当查看与 VHOST 相关的 URL 时才创建池。

在此处输入图片描述

答案1

子进程的数量由池配置文件中的进程管理器配置指令控制。我猜当前的设置是pm = static 使用pm.max_children = 6pm = dynamic 使用pm.start_servers = 6。一个进程将是控制进程,其他进程将是准备处理请求的子进程。如果您只配置了 5 个而不是 6 个子进程,那么我必须承认我不知道最后一个进程是用来做什么的。在大型高吞吐量站点上,这种具有许多随时可用的子进程的配置是有意义的,但在内存受限(可能是虚拟)的环境中,您只希望 PHP 脚本不时执行,不同的配置可能更合适。

为了实现这一点,编辑池配置文件并设置pm = ondemand。然后,将只创建子进程来处理请求。这意味着在没有活动请求时内存消耗更少,尽管这也意味着创建子进程需要更多时间。可以通过选择合理的 来减少后者pm.process_idle_timeout,这样就可以让一定数量的 php 进程保持空闲状态,同时用户很快就会再次使用它们。这个“合理数量”由pm.max_children

笔记:该建议基于我使用 Debian 7 的经验,但它也适用于 Ubuntu。

答案2

许多人鼓励使用pm=ondemand来节省内存。但是,这也意味着您的第一个字节(或服务器答案)的时间将非常长,因为如果您的 Web 服务器最近没有访问,php-fpm 模块将必须先创建一个子模块,然后才能回答请求。如果您使用pm=dynamic,则意味着您将始终至少有 1 个子模块准备好回答客户端请求。重新启动 php-fpm 后,以下将为每个用户加载 1 个子模块:

pm=dynamic
pm.start_servers=1
pm.min_spare_servers=1

相关内容