我正在迁移一个使用 PHP-FPM 在 nginx 后面运行 PHP 应用程序的 Web 服务器的配置。该服务器上有大约 40-50 个(并且还在增加)虚拟主机。该服务器是一个具有 1GB 内存的单 CPU VM。虽然这不是一个很大的资源,但我确实在负载均衡器后面有很多这样的资源,我更喜欢水平扩展而不是垂直扩展。
以前的配置中,所有 vhost 都运行在单个 PHP-FPM 池中,由同一个用户运行。Max-children 约为 20,服务器似乎可以应付施加给它的负载(总计每天约 100,000 次点击 - 不是超级流量)。
考虑到这些网站的隔离,我正在考虑转向一种模型,其中每个虚拟主机都有自己的 PHP-FPM 池,该池在该站点的特定用户下运行,然后将该池 chroot 到虚拟主机的文档根目录。但是,即使在保守的池子设置(初始=2)下,空闲时也会产生近 100 个 FPM 进程。
我的问题是:这会引起问题吗?启动这么多进程是否存在任何固有的内存问题?
最后的附加问题:如果我采用这种方法,是否有任何针对 php-fpm 的 ulimit 提示?
答案1
我一直在关注同样的事情。
事实证明,解决方案是 FPM 的按需进程管理器。只需设置:
pm = ondemand
如果没有命中,则允许 0 个子 FPM 进程。当池获得命中时,会为每个池创建这些进程,并在超时后关闭。