• 技术文章 >后端开发 >PHP7

    FPM鲜为人知的三种模式

    醉折花枝作酒筹醉折花枝作酒筹2021-07-21 09:39:46转载112
    我们经常使用php-fpm,但是不一定所有人都知道fpm有三种模式,今天小年就带大家了解一下fpm的三种模式,有需要的可以参考参考。

    ; Choose how the process manager will control the number of child processes.
    ; Possible Values:
    ;   static  - a fixed number (pm.max_children) of child processes;
    ;   dynamic - the number of child processes are set dynamically based on the
    ;             following directives. With this process management, there will be
    ;             always at least 1 children.
    ;             pm.max_children      - the maximum number of children that can
    ;                                    be alive at the same time.
    ;             pm.start_servers     - the number of children created on startup.
    ;             pm.min_spare_servers - the minimum number of children in 'idle'
    ;                                    state (waiting to process). If the number
    ;                                    of 'idle' processes is less than this
    ;                                    number then some children will be created.
    ;             pm.max_spare_servers - the maximum number of children in 'idle'
    ;                                    state (waiting to process). If the number
    ;                                    of 'idle' processes is greater than this
    ;                                    number then some children will be killed.
    ;  ondemand - no children are created at startup. Children will be forked when
    ;             new requests will connect. The following parameter are used:
    ;             pm.max_children           - the maximum number of children that
    ;                                         can be alive at the same time.
    ;             pm.process_idle_timeout   - The number of seconds after which
    ;                                         an idle process will be killed.
    ; Note: This value is mandatory.

    pm有三种模式:static、dynamic和ondemand

    static

    这种方式比较简单,在启动时master按照pm.max_children配置fork出相应数量的worker进程,即worker进程数是固定不变的。

    dynamic

    动态进程管理,首先在fpm启动时按照pm.start_servers初始化一定数量的worker。

    运行期间如果master发现空闲worker数低于pm.min_spare_servers配置数(表示请求比较多,worker处理不过来了)则会fork worker进程,但总的worker数不能超过pm.max_children。

    如果master发现空闲worker数超过了pm.max_spare_servers(表示闲着的worker太多了)则会杀掉一些worker,避免占用过多资源,master通过这4个值来控制worker数。

    ondemand

    这种方式一般很少用,在启动时不分配worker进程,等到有请求了后再通知master进程fork worker进程,总的worker数不超过pm.max_children,处理完成后worker进程不会立即退出,当空闲时间超过pm.process_idle_timeout后再退出。

    pm.max_children:静态方式下开启的php-fpm进程数量。

    pm.start_servers:动态方式下的起始php-fpm进程数量。

    pm.min_spare_servers:动态方式下的最小php-fpm进程数量。

    pm.max_spare_servers:动态方式下的最大php-fpm进程数量。

    FPM对信号的处理

    php-fpm reload

    php-fpm stop

    kill SIGUSR1 php-fpm 重新使用新的文件,完成日志切割

    kill SIGUSR2 php-fpm 重新启动work进程,重新加载配置文件

    Q1:启动php-fpm进程之后,kill php-fpm master进程号,还能继续服务吗? A: 不能 (所有php-fpm进程都被关闭)

    Q2:启动php-fpm进程之后,kill -9 php-fpm master进程号,还能继续服务吗? A: 能(只kill了 master进程,work进程还在工作)

    Q2:启动php-fpm进程之后,kill php-fpm work进程号,还能继续服务吗?A: 能(work进程被kill后,又新起一个work进程)

    FPM的生命周期

    php_module_startup()

    fcgi_accept_request()

    php_request_startup()

    fmp_request_executing()

    php_execute_script()

    fpm_requset_end()

    php_request_shutdown()

    因为fpm是常驻进程,所以在php_request_shutdown()之后又会从fcgi_accept_request()开始循环。

    推荐学习:php视频教程

    以上就是FPM鲜为人知的三种模式的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:PHP7 FPM
    上一篇:如何安装php7及安装memcache扩展出现新旧php版本兼容问题该怎么办 下一篇:Node、PHP、Java和Go服务端I/O性能大比拼,你觉得谁会赢?
    第16期线上培训班

    相关文章推荐

    • php怎么设置画布颜色• php错误哪几种• PHP中数组和字符串如何进行转换(必看)• 一起聊聊PHP中的备忘录模式• php给函数传参数的方法有哪些

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网