php-fpm配置解析

PHP-FPM是一个PHP FastCGI管理器,php-fpm.conf配置文件用于控制PHP-FPM管理进程的相关参数,好比工做子进程的数量、运行权限、监听端口、慢请求等等。
咱们在编译安装PHP的时,在./configure的时候带 –enable-fpm参数便可开启PHP-FPM。PHP-FPM配置文件为 php-fpm.conf,其语法相似 php.ini 。通常咱们能够在安装目录中找到: /usr/local/php/etc/php-fpm.conf,若是没有的话,那就可能在 /usr/local/php/etc/php-fpm.d/.conf*。

全局配置

[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice

pid:设置PID文件的位置。php

error_log:错误日志的位置nginx

log_level:错误级别。可用级别为:alert(必须当即处理),error(错误状况),warning(警告状况),notice(通常重要信息),debug(调试信息)。默认:notice。laravel

进程池配置

在FPM中,可使用不一样的设置来运行多个进程池。 这些设置能够针对每一个进程池单独设置,在默认的php-fpm进程池的配置文件中,开头是[www]。
[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 51
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 40
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log

listen:设置接受 FastCGI 请求的地址。可用格式为:'ip:port','port','/path/to/unix/socket'。咱们这里配置/tmp/php-cgi.sock,使用Unix域Socket由于不走网络,能够提升Nginx和php-fpm通讯的性能,但在高并发的状况下可能不稳定,这时咱们须要设置下一个参数backlog。面试

固然你也能够设置为127.0.0.1:9000,但我不建议使用。据nginx.conf中的配置fastcgi_pass unix:/tmp/php-cgi.sock;设置PHP监听,:让Nginx支持PHP。sql

listen.backlog:设置 listen 的半链接队列长度,-1表示无限制,由操做系统决定。shell

listen.allowed_clients:容许访问FastCGI进程的IP白名单,设置any为不限制IP,若是要设置其余主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每一个地址是用逗号分隔. 若是没有设置或者为空,则容许任何服务器请求链接。我把它设置为127.0.0.1,即只有当前设备能把请求转发给php-fpm进程池。后端

listen.owner:运行所使用的用户和组,咱们这里设置为www用户组,权限为 0666。服务器

listen.group:同上,设置为www。网络

listen.mode:同上,设置为0666。架构

user:FPM 进程运行的系统用户。必须设置,这里咱们设置为www,即非root用户。

group:FPM 进程运行的系统用户组。若是没有设置,则默认用户的组被使用。

pm:设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。dynamic表示php-fpm进程数是动态的,最开始是pm.start_servers指定的数量,若是请求较多,则会自动增长,保证空闲的进程数不小于pm.min_spare_servers,若是进程数较多,也会进行相应清理,保证多余的进程数很少于pm.max_spare_servers。static表示php-fpm进程数是静态的, 进程数自始至终都是pm.max_children指定的数量,再也不增长或减小。

pm.max_children:静态方式下开启的php-fpm进程数量,这个设置没有绝对正确的值。通常应用的PHP进程须要消耗10~30MB内存,假设咱们使用的服务器设备为这个PHP-FPM进程池分配1024M内存,那么咱们能够将这个值设置为(1024MB内存)/(每一个进程使用20M)= 51个进程。

pm.start_servers:动态方式下的起始php-fpm进程数量,即当PHP-FPM启动时,PHP-FPM进程池中当即可用的进程数,我通常设置这个值为10。

pm.min_spare_servers:动态方式下的最小php-fpm进程数量,若是PHP空闲时,PHP-FPM进程池中科院存在进程数量的最小值。这个值通常与pm.start_servers设置的值同样,因此我这里也设置为10。

pm.max_spare_servers:动态方式下的最大php-fpm进程数量,若是空闲进程大于此值,则进行清理。这个值设置的要比pm.start_servers大。

对于内存大的服务器(好比8G以上)来讲,建议指定静态的max_children值,由于这样不须要进行额外的进程数目控制,会提升效率。由于频繁开关php-fpm进程也会有时滞,因此内存够大的状况下开静态效果会更好。数量也能够根据 内存/30M 获得,好比8GB内存能够设置为100,那么php-fpm耗费的内存就能控制在 2G-3G的样子。

若是内存稍微小点,好比1G,那么指定静态的进程数量更加有利于服务器的稳定。这样能够保证php-fpm只获取够用的内存,将很少的内存分配给其余应用去使用,会使系统的运行更加畅通。

request_terminate_timeout:最大执行时间, 在php.ini中也能够进行配置(max_execution_time),这个是用来处理由于PHP执行时间超长而报502错误的解决。

request_slowlog_timeout:当一个请求超过该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中。 设置为 '0' 表示 'Off',正常生产环境中咱们把它设置为0。

slowlog:慢请求的记录日志。

咱们有时候会常常饱受500,502问题困扰。当nginx收到如上错误码时,能够肯定后端php-fpm解析php出了某种问题,好比,执行错误,执行超时。这个时候,咱们是能够开启慢日志功能的。好比设置request_slowlog_timeout:10s,当一个请求时长超过该设置的超时时间10秒后,就会将对应的PHP调用堆栈信息完整写入到慢日志中。 php-fpm慢日志会记录下进程号,脚本名称,具体哪一个文件哪行代码的哪一个函数执行时间过长等信息。

设置好后,执行如下命令重启PHP-FPM主进程使配置生效。

/etc/init.d/php-fpm restart

以上内容但愿帮助到你们, 不少PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提高,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货须要的能够免费分享给你们 ,须要戳这里     PHP进阶架构师>>>实战视频、大厂面试文档免费获取

相关文章
相关标签/搜索