【问题标题】:What are PHP-FPM pools and what is pm.max_children?什么是 PHP-FPM 池,什么是 pm.max_children?
【发布时间】:2013-11-10 13:12:07
【问题描述】:

我有一个带有 NGINX 和 PHP-FPM 的 Drupal 站点,带有 3 个池。

我想知道什么是 FPM 池,或者只是给我一些好的文档的链接,我已经搜索过这个主题,但我发现的只是如何配置“X”以获得更好的性能。

另外,什么是 pm.max_children?我最近在日志中注意到,当池 www1 达到此值时,池 www1 停止工作,同时锁定我网站上的一个页面,直到我重新加载 PHP-FPM。为什么我会在一段时间后到达 pm.max_children?有没有办法在这种情况下检测并做出反应……重新加载 PHP-FPM?有没有办法避免到达 pm.max_children?

感谢大家的知识。

PD:我正在使用 perusio 的 Drupal 和 Nginx 配置。

【问题讨论】:

    标签: nginx drupal-7 php


    【解决方案1】:

    你可以简单地说每个池就像一个单独的 php,就像我使用池来由不同的用户运行每个池,在资源方面给每个池适当的限制,例如在同一台服务器上运行的不同网站.

    我不明白为什么同一个站点有 3 个池,你在 nginx 中使用 upstream 吗?

    max_children 是允许 fpm 产生以处理并发连接的产生进程的数量,如果你有很多并发连接,那么你最好增加这个数字,如果达到这个数字 fpm 不会产生另一个孩子并等待一个有空来处理等待请求。

    编辑

    尝试使用此配置,可能有用,这是配置文件中的 sn-p,默认情况下已注释。

    ; The number of requests each child process should execute before respawning.
    ; This can be useful to work around memory leaks in 3rd party libraries. For 
    ; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
    ; Default Value: 0
    ;pm.max_requests = 500
    

    还有一个

    ; The timeout for serving a single request after which the worker process will
    ; be killed. This option should be used when the 'max_execution_time' ini option
    ; does not stop script execution for some reason. A value of '0' means 'off'.
    ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
    ; Default Value: 0
    ;request_terminate_timeout = 0
    

    【讨论】:

    • 感谢 Mohammad,我认为我没有那么多并发连接。在我看来,一些“进程”被锁定并被视为活动并发连接。这对你有意义吗?我不确定我是否使用上游,我是使用其他人的配置 (github.com/perusio/drupal-with-nginx)。
    • 我知道拥有 3 个池的唯一事情是,如果池 www1 达到 pm.maxchildren,那么 www2 将继续......我认为这很好。至少这是我在池状态页面中所理解的。
    • 是的,这是我期待的配置github.com/perusio/drupal-with-nginx/blob/D7/…,无论如何,我认为问题不在于 nginx 本身,可能是一个不会超时并保持连接被占用的页面。我不确定我们如何检测到类似的东西(哪个页面)
    • 感谢 Mohammad,我认为这不是一个特定的页面,它是随机的。我在厄瓜多尔凌晨 5:00 测试了这种行为,Google Analitics Real Time 显示网站上除了我之外没有人。因此,我浏览了网站上的许多页面,直到达到 pm.max_children,然后它停止并将错误附加到日志中。我测试的最后一页不再加载,网站上的其他页面都很好。发现错误后,我重新加载了 php-fpm,并且“锁定”页面加载正常。到目前为止,我所知道的是,当达到 pm.max_children 时,随机页面将被“锁定”。非常感谢。
    • 如果你不重新加载它会永远卡住吗?还是会随着时间的推移变得更好?
    猜你喜欢
    • 2020-12-10
    • 2010-11-14
    • 1970-01-01
    • 2017-07-26
    • 2011-05-01
    • 2020-03-28
    • 1970-01-01
    • 2011-04-20
    • 2015-03-17
    相关资源
    最近更新 更多