我有一个网站运行Magento在以下设置:
每个PHP-FPM进程消耗大约80MB的RAM。
我想微调PHP-FPM和mpm_worker的设置。 阅读文档我对PHP-FPM和mpm_worker中的选项之间的关系感到困惑。
例如,PHP-FPM具有configuration: pm.min_spare_servers , pm.max_spare_servers , pm.start_servers和max_children 。 我明白这些选项对于PHP-FPM意味着什么。
但是,mpm_worker具有以下configuration: MinSpareThreads , MaxSpareThreads , StartServers和ThreadLimit 。 再次,孤立到mpm_worker我明白他们做什么。
我的问题是:这些configuration如何相互关联? 比方说,我设置StartServers=2和ThreadsPerChild=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数。