美文网首页
【笔记】php-fpm 配置文件

【笔记】php-fpm 配置文件

作者: 言十年 | 来源:发表于2019-04-02 00:30 被阅读0次

    本文属笔记,不算原创

    php-fpm 配置

    下面配置项的注释,是或摘或借鉴,有的没找到的。我翻译文档了(安装默认的一个www.conf.defaulf。每一项上面都会有对应的英文说明。)。

    这些配置对应的struct 在./sapi/fpm/fpm/fpm_conf.h

    [sock0]
    listen = /dev/shm/php-fpm-7.0.sock ;指定sock通讯的文件地址 or  listen = 0.0.0.0:9000
    listen.allowed_clients = 127.0.0.1 ;允许访问FastCGI进程的IP址
    listen.backlog = 51200 ;跟tcp有关。参考[《TCP SOCKET中backlog参数的用途是什么?》](https://www.cnxct.com/something-about-phpfpm-s-backlog/)
    listen.owner = nobody ;启动进程的用户
    listen.group = nobody ;启动进程的组
    listen.mode = 0660 ;用socket连接方式时,指定拥有unix socket权限的用户,默认和运行的用户一样;用tcp连接可以注释掉
    user = nobody
    group = nobody
    pm = dynamic ;fpm 进程管理的三种模式 ,选项有static、dynamic、ondemand(按需模式)
    pm.max_children = 256 ;子进程最大数
    pm.start_servers = 10 ;启动时进程最大数
    pm.min_spare_servers = 5 ;保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
    pm.max_spare_servers = 10 ;保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
    pm.max_requests = 51200 ;设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0′ 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
    pm.status_path = /php-fpm-7-status ;FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none.
    ping.path = /heart ;FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。
    ping.response = check_ok ;用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.
    request_terminate_timeout = 10 ;设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0′ 表示 ‘Off'.
    当经常出现502错误时可以尝试更改此选项。
    request_slowlog_timeout = 5  ;当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0′ 表示 ‘Off'
    slowlog = /home/nobody/logs/php-fpm-7/www-slow.log ;慢请求的记录日志,配合request_slowlog_timeout使用
    php_admin_value[error_log] = /app/webserver/logs/php-fpm-7/www-error.log ;可以覆盖php.ini的配置。你可以在一个php脚本里 输出phpinfo()然后看下配置的值。就明白了。另外文档中也说了这个配置不会被ini_set 覆盖。
    php_admin_flag[log_errors] = on
    rlimit_files = 102400 ;设置文件打开描述符的rlimit限制. 默认值: 系统定义值
    系统默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
    

    上面pm = dynamic是配置进程的管理方式。有三种:

    • 静态模式(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):这种模式很像传统的cgi,在启动时不分配worker进程,等到有请求了后再通知master进程fork worker进程,来了请求后再fork子进程进行处理,总的worker数不超过pm.max_children,处理完后worker进程不会立即退出,当空闲时间超过pm.process_idle_timeout后再退出。

    monitor php-fpm

    可以方便zabbix 监控

    我根据这篇《Nginx – Enable PHP-FPM Status Page》配置。curl yan.com/status 为空白。根据这篇《How to Enable and Monitor PHP-FPM Status in Nginx》 对照了下少了一行fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    [root@bogon php-fpm.d]# curl yan.com/status
    pool:                 www
    process manager:      dynamic
    start time:           01/Apr/2019:23:19:44 +0800
    start since:          5
    accepted conn:        1
    listen queue:         0
    max listen queue:     0
    listen queue len:     128
    idle processes:       9
    active processes:     1
    total processes:      10
    max active processes: 1
    max children reached: 0
    slow requests:        0
    

    参考资料:

    相关文章

      网友评论

          本文标题:【笔记】php-fpm 配置文件

          本文链接:https://www.haomeiwen.com/subject/tjkvbqtx.html