php-fpm配置详解

php-fpm配置详解

一、php-fpm和nginx的交互

  • nginx通过ip和端口号和php-fpm进行交换

二、CGI、FastCGI、php-fpm 之间的关系

  • CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。
  • FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。
  • PHP-CGI:是 PHP (Web Application)对 Web Server 提供的 CGI
  • PHP-FPM:是 PHP(Web Application)对 Web Server 提供的 FastCGI 协议的接口程序,额外还提供了相对智能一些任务管理。

    PHP 的解释器是 php-cgi,它只是个 CGI 程序,只能解析请求,返回结果,不会进程管理。所以就出现了一些能够调度 php-cgi 进程的程序,比如说由 lighthttpd 分离出来的 spawn-fcgi。PHP-FPM 也是这么个东西,在长时间的发展后,逐渐得到了大家的认可,也越来越流行。

    相关文章

三、php-fpm配置

  1. pm参数配置
    static :表示在 php-fpm 运行时直接 forkpm.max_chindren 个子进程,
    dynamic:表示,运行时 forkstart_servers 个进程,随着负载的情况,动态的调整,最多不超过 max_children 个进程。
  2. pm.max_chindren/pm.start_servers/pm.min_spare_servers/pm.max_spare_servers
    设置最大php-fpm数量,php-fpm不是越多越好,越多增加进程管理开心和进程上下文切换开销。取决于内核数和cpu核数。
    pm.start_servers ,启动时的进程数
    pm.min_spare_servers ,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
    pm.max_spare_servers ,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
  3. pm.max_requests参数
    一个进程处理多少个请求后重启,为了防止内存泄漏要设置一个合理的数为佳。
  4. daemonize参数
    设置为yes就会以后台守护进程的方式运行。
  5. pid
    pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启
  6. error_log
    错误日志,默认在安装目录中的var/log/php-fpm.log
  7. log_level
    错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息),默认: notice。
  8. emergency_restart_threshold/emergency_restart_interval
    表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。
  9. process_control_timeout
    设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0。
  10. listen
    fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: ‘ip:port’, ‘port’, ‘/path/to/unix/socket’. 每个进程池都需要设置.
  11. listen.allowed_clients
    允许访问FastCGI进程的IP,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接
  12. request_terminate_timeout
    设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的’max_execution_time’因为某些特殊原因没有中止运行的脚本有用. 设置为 ‘0’ 表示 ‘Off’.当经常出现502错误时可以尝试更改此选项。
  13. request_terminate_timeout
    如果file_get_contents请求的远程资源如果反应过慢,file_get_contents就会一直卡在那里不会超时。我们知道php.ini 里面max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。真正能够控制 PHP 脚本最大执行时间的是 php-fpm.conf 配置文件中的request_terminate_timeout参数。
    request_terminate_timeout默认值为 0 秒,也就是说,PHP 脚本会一直执行下去。这样,当所有的 php-cgi 进程都卡在 file_get_contents() 函数时,这台 Nginx+PHP 的 WebServer 已经无法再处理新的 PHP 请求了,Nginx 将给用户返回“502 Bad Gateway”。修改该参数,设置一个 PHP 脚本最大执行时间是必要的,但是,治标不治本。例如改成 30s,如果发生 file_get_contents() 获取网页内容较慢的情况,这就意味着 150 个 php-cgi 进程,每秒钟只能处理 5 个请求,WebServer 同样很难避免”502 Bad Gateway”。解决办法是request_terminate_timeout设置为10s或者一个合理的值,或者给file_get_contents加一个超时参数。
    引用
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值