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

我有一个网站运行Magento在以下设置:

  • Apache 2.4与mpm_worker
  • PHP-FPM
  • 服务器内存总量:14GB(10GB可用于Apache / PHP)

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

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

例如,PHP-FPM具有configuration: pm.min_spare_serverspm.max_spare_serverspm.start_serversmax_children 。 我明白这些选项对于PHP-FPM意味着什么。

但是,mpm_worker具有以下configuration: MinSpareThreadsMaxSpareThreadsStartServersThreadLimit 。 再次,孤立到mpm_worker我明白他们做什么。

我的问题是:这些configuration如何相互关联? 比方说,我设置StartServers=2ThreadsPerChild=25 。 这会给我50个线程开始与Apache / mpm_worker。 如果我然后设置pm.start_servers = 50 ,PHP-FPM最初会产生50个进程。

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

我希望有人能够对此有所洞察。

谢谢!

关系是dynamic映射的。 它们是独立的进程,也可以在不同的服务器上运行,因此有很多configuration选项。

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

在这里有很多的variables来告诉你如何configuration,但一般configurationApache,所以它有足够的线程来实时处理请求,并configurationphp-fpm所以你的PHP脚本/文本有足够的内存运行。 有了各种可能的caching选项,只能通过对正在运行的系统进行基准testing来确定。

Apache使用线程的subprocess来处理来自客户端的请求,但是它只会为PHP文件调用PHP-FPM-图像,css和js应该直接从Apache服务,因此不会使用PHP-FPM线程。

PHP-FPM有多个线程没有孩子 – 每个线程服务于Apache的请求。

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

我最近一直在调整Apache服务器,发现如果你有多个内核,最好增加每个线程的subprocess数。