php5-fpmconfiguration下午 – (节点)进程pipe理器设置节点在更多的外行人术语

我有以下configuration为php-fpm

[www] listen = 127.0.0.1:9000 listen.allowed_clients = 127.0.0.1 user = www-data group = www-data pm = dynamic pm.max_children = 50 pm.start_servers = 25 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 2500 pm.status_path = /php-status 

我阅读这个文档页面 。

希望更多的关于pm相关设置的人性化解释。

例如,pm = dynamic是什么? 还有其他可能的设置为pm =? pm.max_children设置将要服务的同时请求数量的限制。

那么这是否意味着如果我有51个不同的访问者,php-fpm不能处理第51个访问者到这个网站?

那会发生什么? 第51位访客是否得到404?

我比操作更开放,所以会更加人性化的解释。

有两种types的处理器pipe理(PM)。 dynamicstatic

静态的

静态方法非常简单。 你有一定数量的孩子,php-fpm会一直努力保持这个数量的孩子。 所以,如果你设置pm=staticpm.max_children = 50 ,那么pm.max_children = 50你总是会有50个孩子。

如果您的stream量非常一致,测量良好,这是非常好的。 这可以防止浪费工作量增长和缩小工人(最小的影响与dynamic)。 这也降低了不可预测性。 保存CPU

如果设置为静态,则所有其他字段均未使用。

dynamic

dynamic允许你的孩子数量波动。 我们走的时候比较容易理解。

服务器启动时,从pm.start_servers开始。 我们现在有25个例子。 比方说,其中20个正在使用,另一个请求已经通过,然后它的服务,但你的孩子数量增加1,因为它已经达到了最低的备用门槛。 请记住,创build过程非常耗时,所以您希望使用已经处于活动状态的进程来处理它。 假设负荷增加了,现在你有49个活跃的孩子。 那么最多50个,因为这是你的最大值。 现在让我们说你的负载减less,有14个活跃的。 然后,它将卸载一个孩子,达到总共49个孩子,因为它符合您的最大的备用服务器。 如果你的负载进一步下降到零,你将有35个孩子,你将永远不能低于35(除了通过最大请求,见下文)。 孩子数量减less,所以你可以得到更多可用的回忆。

dynamic是一个“不用担心,我会在极限内为您优化”。

这是很好的,如果你需要保持低记忆。 保存RAM

超过最大请求

如果你有50个活动,并得到另一个请求,它可能会排队经理。 虽然不确定,但我认为如果队列长度过长,也会拒绝。 如果队列长时间停留,请求者(如nginx)会在网关超时时返回504给最终用户。 为了避免所有请求由于无休止的拥塞而被超时(ddos?),nginx通常会在nginx中定义的一段时间内(通常完全猜测大约30秒)将负载传递给死亡服务器,一旦达到了一定数量的错误从后端。

最大请求

pm.max_requests值定义了在一个新进程占据它的位置(或者如果仍然处于如上定义的当前dynamic状态的限制范围内没有任何东西)之前,一个孩子应该处理多less个请求。 这有助于防止内存泄漏(无论是在PHP的FFP的孩子本身或您的应用程序)。 所以,如果有内存泄漏,孩子的内存使用量将不断增加。 为什么在php执行完成后它一直在上升,所有这些都是php-fpm如何优化它的stream程和东西…我觉得这是一个单独的文章。


注意防止您的post显示混乱(或不清晰)。 这与您有多less访问者,甚至有多less人现在正在查看您的网站没有任何关系。 这是关于我们正在同时处理多less个PHP。 你会期望大多数进程在300毫秒内完成。 在100ms以下,个人认为是理想的。 使用更好的硬件,您可以更快速地处理,因此尽pipe同时处理计数没有变化,您仍然可以处理更多的访问者(或更准确地说,请求)。


PS我所说的这里也适用于Apache。 只是不同的variables名称。