php-fpm 进程数 20,那么就意味着 20 个请求可以同时处理吗?

发布于 2022-09-06 05:03:18 字数 50 浏览 8 评论 0

如果一台机器 php-fpm 进程数 20,那么就意味着 20 个请求可以同时处理吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

傲影 2022-09-13 05:03:18

进程上限设为20,就意味着同时只能处理20个请求。之后的请求会进行排队,这个排队由fpm主进程完成,nginx采用的是异步IO模型,不会产生阻塞。

橘香 2022-09-13 05:03:18

PHP-FPM1:1 模型。单机情况下,如果 PHP-FPM 配置的最大子进程数为 20,那么就最多可以并发处理 20 个请求。

原因

PHP-FPM 采用 master/worker 多进程架构。
即:众多的 worker 进程组成了进程池,等待 master 进程分配任务,而且每个 worker 进程只能同时处理单个任务,前一个处理结束,才能为下一个服务。

FPM 配置

参考:FPM 配置
按对子进程的管理类型,可通过不同的配置调整 worker 进程数:

  • static - 子进程的数量是固定的(pm.max_children)

  • ondemand - 进程在有需求时才产生(当请求时,与 dynamic 相反,pm.start_servers 在服务启动时即启动

  • dynamic - 子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers

相关的 Zend 源码

版本:PHP-5.6
文件位置:vim sapi/fpm/fpm/fpm.c +93
fpm_run 方法中,也可以看出只给每个空闲的子进程分配一个请求任务。

/*    children: return listening socket
    parent: never return */
int fpm_run(int *max_requests) /* {{{ */
{
    struct fpm_worker_pool_s *wp;

    /* create initial children in all pools */
    for (wp = fpm_worker_all_pools; wp; wp = wp->next) {
        int is_parent;

        is_parent = fpm_children_create_initial(wp);

        if (!is_parent) {
            goto run_child;
        }

        /* handle error */
        if (is_parent == 2) {
            fpm_pctl(FPM_PCTL_STATE_TERMINATING, FPM_PCTL_ACTION_SET);
            fpm_event_loop(1);
        }
    }

    /* run event loop forever */
    fpm_event_loop(0);

run_child: /* only workers reach this point */

    fpm_cleanups_run(FPM_CLEANUP_CHILD);

    *max_requests = fpm_globals.max_requests;
    return fpm_globals.listening_socket;
}
/* }}} */

参考:PHP-FPM运行原理

替代方案

FPM 只是 PHP 官方实现的 fast-cgi 进程管理器。
对应的也有一些替代的方案,比如:采用异步非阻塞多进程模型的 swoole-http-server
参考:swoole-http-server

其他

当然,在现实使用场景中,要根据实际需求来做技术选型。

梦年海沫深 2022-09-13 05:03:18

没明白你说的什么意思

梦冥 2022-09-13 05:03:18

刚刚看到不好意思,这个的意思是同时处理20个请求 直到有某个请求处理完才会有新的请求进来

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文