我使用 php-fpm 设置了我的 nginx。每个 vhost 都有自己的 unix-socket 和单独的 POOL。
但问题是 php-fpm 为我在中创建的每个配置池创建了 7 个线程/etc/php5/fpm/pool.d/
为什么?我如何定义仅当查看与 VHOST 相关的 URL 时才创建池。
答案1
子进程的数量由池配置文件中的进程管理器配置指令控制。我猜当前的设置是pm = static
使用pm.max_children = 6
或pm = 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