PHP-FPM 设置与 mpm_worker(Apache)之间的关系

PHP-FPM 设置与 mpm_worker(Apache)之间的关系

我有一个运行 Magento 的网站,设置如下:

  • 带有 mpm_worker 的 Apache 2.4
  • PHP-FPM
  • 服务器总 RAM:14GB(10GB 可供 Apache/PHP 使用)

每个 PHP-FPM 进程大约消耗 80MB 的 RAM。

我想微调 PHP-FPM 和 mpm_worker 的设置。阅读文档后,我对 PHP-FPM 和 mpm_worker 中的选项之间的关系有点困惑。

例如,PHP-FPM 有配置:、和pm.min_spare_serverspm.max_spare_servers我理解这些选项对于 PHP-FPM 的含义。pm.start_serversmax_children

但是,mpm_worker 具有以下配置:MinSpareThreads,和。再次强调,仅针对 mpm_worker MaxSpareThreads, 我就能理解它们的作用。StartServersThreadLimit

我的问题是:这些配置如何相互关联?假设我设置了StartServers=2ThreadsPerChild=25。这将为我提供 50 个线程,用于 Apache/mpm_worker。如果我设置了pm.start_servers = 50,PHP-FPM 将首先生成 50 个进程。

那么这 50 个“Apache”线程和 50 个“PHP-FPM”进程之间有什么关系?每个 Apache 线程都使用一个 PHP-FPM 进程吗?

我希望有人能对此提供一些见解。

谢谢!

答案1

Apache 使用线程的子线程来处理来自客户端的请求,但它只会为 php 文件调用 PHP-FPM - 图像、css 和 js 应该直接从 Apache 提供,因此不会消耗 PHP-FPM 线程。

PHP-FPM 具有多个没有子线程的线程 - 每个线程都处理来自 Apache 的请求。

据我所知,如果您没有在 Apache 中设置 KeepAlive,来自同一客户端的多个请求(加载页面,加上图像,css 和 js)应该会消耗多个线程。请参阅此链接有关 KeepAlive 的更多信息。

我最近一直在自己调整 Apache 服务器并且发现如果您有多个核心,最好增加每个线程的子进程数量。

答案2

这种关系是动态映射的。它们是独立的进程,也可以在独立的服务器下运行,因此您有充足的配置选项。

Apache 进程/线程处理初始连接,然后使用 php-fpm 进程解析 PHP 文件以返回请求。

这里有很多变量可以为您提供如何配置的建议,但通常配置 apache 使其具有足够的线程来实时处理请求,并配置 php-fpm 以便您的 PHP 脚本/wensites 有足够的内存来运行。由于有各种可能的缓存选项,这只能通过对正在运行的系统进行基准测试来决定。

相关内容