作用:本身也是一个进程,主要是为了管理fastcgi进程池,控制进程数量, 监控进程运行状态。在这之前还有一个php-cgi, 虽然是官方的,但性能不咋地,最终被php-fpm替代了。这里简单说一下cgi,php会为外部应用提供很多种sapi(服务器应用程序编程接口),常见的给apache的mod_php5,给nginx的cgi,fastcgi,给IIS的ISAPI,还有Shell的CLI,已达到跟外部应用交互的目的,大概请求过程就是nginx->sapi->php。fastcgi是cgi的一个升级版本,cgi在每接收一个请求的时候都会创建一个进程,处理并返回结果之后会销毁这个进程,在大并发的情况下会频繁的重复创建、销毁动作,开销较大。而fastcgi在创建一个进程之后并不会关闭,在处理完一个请求之后处于闲置状态,等待下一个请求的接入。
参数:其实如果把参数大概了解一下就能知道这个东西到底在做什么。编译php的时候加上php-fpm就可以了,执行文件还有配置文件也都在php下面
- error_log = /usr/local/var/log/php-fpm.log 日志路径
- pid = /usr/local/var/run/php-fpm.pid pid文件位置,只要为了防止启动多个进程副本
- log_level = notice 错误级别
- process_control_timeout = 0 设置子进程接收复用信号的超时时间,再处理请求前php-fpm会发送复用信号给fastcgi,让fastcgi准备好接收请求并处理,如过超过了这个参数设定的时间fastcgi还有没给反馈,php-fpm会把任务派送给下一个fastcgi进程
- daemonize = yes php-fpm后台运行 默认是yes 如果设置为no,启动的时候就一直挂在那,打印一些调试信息
- listen = 127.0.0.0:9000 监听的端口
- listen.backlog = -1 缓存队列的最大长度,假如我们最大开启了两个进程来处理请求,同时并发四个请求的时候,剩下两个会被挂起来放在队列里,这个参数表示队列的最大长度,如果并发量足够大以至于超出这个长度会出现访问失败的情况 -1表示无限制
- listen.allowed_clients = 127.0.0.1 允许访问php-fpm的ip白名单,逗号分割。默认any表示无限制
- unix socket 和nginx的连接方式,这里主要有两种 nuix socket和tcp socket nuix直接读写socket文件,少了tcp开销,性能更好一些。但是缺少协议的支撑,在大并发下不稳定
- pm = dynamic 表示使用哪种方式对进程数量进行管理 (1)dynamic 动态管理进程数,当空闲进程数小于min_spare_servers 时会拉起新的进程,当空闲进程数大于max_spare_servers 时会释放多余进程;(static)静态的 就始终保持max_children 进程数
- pm.max_children = 300 开启的最大进程数
- pm.start_servers = 20 启动的时候拉起的进程数
- pm.min_spare_servers = 5 最小空闲进程数
- pm.max_spare_servers = 35 最大空闲进程数
- pm.max_requests = 500 每个进程处理请求数达到500时会重启,主要为了防止内存溢出 设置为0表示不会重启 频繁重启(开销较大,并且可能会导致无可用进程)和从不重启肯定都是不好的,还是要设定和合适的值
- status_path = /status 应该是和nginx里的那个类似,一个监控页面
- access_log = access.log 每条请求的日志
- access_format 日志格式
- slow = slow.log 慢日志 可以定位到哪个脚本,哪个函数执行效率慢
- reques_slowlog_timeout = 10 执行时间超过10s会记录慢日志
- request_terminate_timeout = 0 请求超时时间
- rlimit_files = 1024 限制打开的最大文件数
补充:
如果通过php-fpm访问php,php的参数max_execution_time会失效,php-fpm配置文件request_terminate_timeout 会起作用。
待补充