php-fpm.conf配置文件中文及重要参数注明
![](/uploads/allimg/200930/202008081644319282811989.jpg)
php-fpm工作流程
php-fpm全名是PHP FastCGI进程治理器
php-fpm启动后会先读php.ini,然后再读响应的conf配置文件,conf配置可以覆盖php.ini的配置。
启动php-fpm之后,会创立一个master进程,监听9000端口(可配置),master进程又会按照fpm.conf/www.conf去创立若干子进程,子进程用于处置实际的业务。
当有客户端(比方nginx)来连接9000端口时,余暇子进程会本人去accept,假如子进程全部处于劳碌状态,新进的待accept的连接会被master放进队列里,等候fpm子进程余暇;
这个存置待accept的半连接的队列有多长,由 listen.backlog 配置。
相关学习引荐:php编程(视频)
配置里面的所有相对途径,都是相关于php的安置途径。
除了有php-fpm.conf配置文件外,平常还有其他的*.conf配置文件(也可以不要,直接在php-fpm.conf配置)用于配置进程池,不一样的进程池可以用不一样的会员施行,监听不一样的端口,处置不一样的任务;多个进程池共用一个全局配置。
include=/opt/remi/php56/root/etc/php-fpm.d/*.conf 载入其他的配置文件。
php-fpm全局配置参数中文说明:
pid = /opt/remi/php56/root/var/run/php-fpm/php-fpm.pid
#pid进程文件,默许为none。error_log = /opt/remi/php56/root/var/log/php-fpm/error.log
#错误日志位置,默许:安置途径 #INSTALL_PREFIX#/log/php-fpm.log。假如设定为syslog,log就会发送给syslogd效劳而不会写进文件里。syslog.facility = daemon
#把日志写进系统log,linux还不足熟知,临时不消理会。syslog.ident = php-fpm
#系统日志标示,假如跑了多个fpm进程,需要用这个来区分日志是谁的。log_level = notice
#日志等级,默许notice,可选:alert, error, warning, notice, debugemergency_restart_threshold = 60
#配合下面emergency_restart_interval参数emergency_restart_interval = 60s
#假如在此参数设定的时间内,显现SIGSEGV或SIGBUS的子进程数超越emergency_restart_threshold参数设定的值,那么fpm就会文雅的重新启动,值是0表示off这个功效,可用的单位有:s秒,m分,h时,d天。process_control_timeout = 0
#设定子进程接受主进程复用信号的超不时间。这个每天清楚,是过了这个时间就不克不及复用了?process.max = 128
#当动态治理子进程时,fpm最多能fork多少个进程,0表示无穷制,这是所有进程池能启动子进程的总和,慎重使用。process.priority = -19
#设定子进程的优先级,在master进程以root会员启动时有效;假如没有设定,子进程会继承master进程的优先级,值范畴-19(最高)到20(最低),默许不设定。daemonize = yes
#设定成no用于调试bug,默许为yes。rlimit_files = 1024
#设定master进程最多能翻开的文件,默许为系统的值。rlimit_core = 0
#master进程中心rlimit限制值;可选unlimited或>=0的整数,默许为系统的值。events.mechanism = epoll
#事件处置机制,默许主动检测,可选值:select,poll,epoll(linux>=2.5.44),kqueue,/dev/poll,portsystemd_interval = 10s
#当fpm被设定为系统效劳时,多久向效劳器报告一次状态,单位有s,m,h。
php-fpm进程池配置 pool Definitions:
在不一样的监听端口和不一样的治理选项下可以跑任意数目的池,并没有个数限制;
池的名字用于 logs 和 stats。
user = apache
group = apache
#以什么会员什么组的权限来运转池fpm。
用apache可以像httpd效劳一样去拜访某些名目
listen = 127.0.0.1:9000
#监听的ip和端口,可以 /path/to/unix/socket 来监听unix socket,机能更好。listen.backlog = 65535
#未accept处置的socket队列大小,-1 on FreeBSD and OpenBSD,其他平台默许65535,高并发时重要,合理设定会及时处置排队的恳求;太大会积压太多,处置完后nginx在前面都等超时断开这个和fpm的socket连接了,就杯具了。不要用-1,倡议1024以上,最好是2的幂值。#一个池共用一个backlog队列,所有的池进程都去这个队列里accept连接。
#最大数目受限于系统配置 cat /proc/sys/net/core/somaxconn,系统配置修改:vim /etc/sysctl.conf,增添 net.core.somaxconn = 2000 则最大为2000,然后php最大的backlog可以到2000。
listen.owner = apache
listen.group = apache
listen.mode = 0660
#用socket连接方式时,指定具有unix socket权限的会员,默许和运转的会员一样;用tcp连接可以注释掉
listen.allowed_clients = 127.0.0.1
#设定同意连接fpm的地址,比方nginx就要来连,多个地址用逗号隔开,假如不配置,则默许任意地址都能来连。process.priority = -19
#池进程的权限,一样要master进程是root会员才有效,和全局阿谁一样,不设定的话会继承master进程的优先级。pm = dynamic
#启动时子进程治理方式,可选值:static(启动时创立指定个数), dynamic(启动时按照状况创立,至少有一个), ondemand(启动时不创立子进程,有需求才创立)pm.max_children = 5
#该池同时最多存在5个进程, 三种治理方式都要配置pm.start_servers = 2
#fpm启动时创立2个子进程,只适用动态dynamic治理方式pm.min_spare_servers = 2
#效劳器闲置时最少保持2个子进程,不足这个数就会创立,只适用动态dynamic治理方式pm.max_spare_servers = 3
#效劳器闲置时最多要有几个,多了会kill,只适用动态dynamic治理方式pm.process_idle_timeout = 10s
#子进程闲置10s后就会被杀掉。pm.max_requests = 500
#每个子进程最大处置500恳求就被回收,可防止内存泄露。pm.status_path string
#FPM 状态页面的网址。假如没有设定,则没法拜访状态页面,默许值:无。
ping.path string
#FPM 监控页面的 ping 网址。假如没有设定,则没法拜访 ping 页面。该页面用于外部检测 FPM 可否存活并且可以响应恳求。请留意必需以歪线开头(/)。
ping.response string
#用于定义 ping 恳求的返回响应。返回为 HTTP 200 的 text/plain 格局文本。默许值:pong。process.priority int
#设定 worker 的 nice(2)优先级(假如设定了的话)。 该值从 -19(最高优先级) 到 20(更低优先级)。 默许值:不设定prefix string
#检测途径时使用的前缀access.log = var/log/$pool.access.log
#拜访文件日志,没何用处,比方yii2每次都记载拜访index.php,只是记载真实的PHP文件。slowlog = var/log/$pool.log.slow
#PHP文件施行过慢的日志,会准确的记载详细哪一行代码太慢,这个非常有用,在设定了时间时生效。request_slowlog_timeout = 2s
#超越这个运转时间就会写慢日志request_terminate_timeout = 3s
#单个恳求的超不时间,有时候php.ini设定的最大施行时间未生效,这个就会来干掉阿谁施行太久的恳求。rlimit_files = 1024
#最大翻开句柄数,默许为系统值。rlimit_core = 0
#最多的中心使用数,默许为系统分配。chroot = /path
#途径必需是绝对途径,改动子进程的跟名目,可以把进程对文件系统的读写与实际的操纵系统文件系统隔离,对平安有好处。chdir = /var/www
#改动当前工作名目,可以用相对途径,默许是当前名目或者chroot。
catch_workers_output = yes
#重定向标准输出stdout和标准错误stderr到主错误日志,假如不设定,这两个日志就会定向到/dev/null,在高负载状况下,这个配置会引发页面延迟几毫秒,默许不开启。clear_env = no
#创立work进程时可否清除环境变量,假如是yes,那么该子进程 getenv() 就拜访不到 $_ENV 和$_SERVER 了。security.limit_extensions = .php .php3 .php4 .php5
#为了平安,限制能施行的足本后缀#为当前池指定别的的 php.ini 配置,比方指定当前池的错误日志写在哪个地方
php_value/php_flag
#可以设定php.ini的内容,可以被ini_set覆盖php_admin_value/php_admin_flag
#这个同上,但是不会被ini_set覆盖。#其中flag设定的,值只能是on, off, 1, 0, true, false, yes or no,其他类型的值需要用value。
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M
#这种办法设定 `disable_functions` 和 `disable_classes` 时,不会覆盖 php.ini 的设定,只会追加。
留意:PHP配置值通过 php_value 或者 php_flag 设定,并且会覆盖之前的值。
disable_functions 或者 disable_classes 在 php.ini 之中定义的值不会被覆盖掉,但是会将新的设定附加在原有值的后面。
使用 php_admin_value 或者 php_admin_flag 定义的值,不克不及被 PHP 代码中的 ini_set() 覆盖。
自 5.3.3 起,也可以通过 web 效劳器设定 PHP 的设定。
nginx 通过 unixsock 与 php-fpm 通讯:
适用处景:nginx和php-fpm在统一台效劳器上,这时可以直接用unixsocket进程间通讯,不走tcp端口通讯,可以节省创立连接的时间,从而提高机能。
1、设定php-fpm的listen为/opt/remi/php56/root/var/run/php-fpm/php567-fpm.sock(可以用相对途径),然后重新启动fpm就会主动创立该php567-fpm.sock文件
2、nginx的fastcgi_pass参数修改为 unix:/opt/remi/php56/root/var/run/php-fpm/php567-fpm.sock; 通过php567-fpm.sock文件去和fpm通讯,需要包管该 php567-fpm.sock 文件 nginx 有权限拜访。
总结:
sock文件随意创立到哪里都可以,只要fpm有权限在阿谁名目里写文件,nginx有权限去读就可以。tcp连接会更不乱,由于有tcp和谈包管数据的准确性,但是sock有更少的数据拷贝和上下文切换,更少的资源占用。不外只能在nginx和fpm在统一台机器上才能用sock。
php-fpm进程状态监控
1、nginx配置:碰到 status 的恳求,直接转发给php
location ~^/status$ {
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
2、fpm配置:pm.status_path = /status
3、然后从新fpm和nginx,在阅读器里拜访就能看到了:
默许以 text/plain 展现结果,可以传参数 ?json/html/xml 离别得到json等格局的结果;参数full可以查看每个子进程的明细
pool 进程池名称
process manager 进程治理方式
start time 进程什么时候启动的
start since 进程已经运转了多少秒
accepted conn 该池总共accept了多少连接
listen queue 等候accept的连接的数目
max listen queue fpm启动后,历史最高档待accept的连接的数目
listen queue len 配置的监听队列最大长度 受限于`listen.backlog`和系统`cat /proc/sys/net/core/somaxconn`,两者中取最小值
idle processes 闲置的进程数
active process 正在工作的进程数(加上限制的,就是总的子进程数)
total processes 总的子进程数目
max active processes fpm启动后,历史最多同时工作的进程数
max children reached 进程治理模式为 'dynamic'和 'ondemand'时,此数值是当子进程不足用时,master创立更多子进程的次数
slow requests 慢恳求个数
full参数下
pid 子进程ID;
state 子进程状态(Idle, Running, ...);
start time 子进程启动的时间;
start since 子进程启动后运转了多少秒;
requests 当前子进程一共处置了多少个恳求;
request duration 恳求消耗的纳秒数;
request method 恳求办法 (GET, POST, ...);
request URI 恳求参数;
content length POST恳求时,恳求的内容长度;
user - the user (PHP_AUTH_USER) (or '-' if not set);
script 恳求的哪个php文件;
last request cpu 上次恳求消耗的cpu资源
last request memory 上次恳求消耗的内存峰值
假如进程是闲置状态,那这些信息记载的就是上次恳求的相关数据,不然就是当前本次恳求的相关数据。
backlog配置问题
一个fpm子进程在统一时间只能处置一个恳求,假如,backlog设定得过大,nginx之类的客户端发起的恳求不断没有fpm子进程停止accept,nginx就会直接断掉这个连接,等fpm忙过来了再去accept的时候,就会发明断开了,于是报错。backlog设定得过小,拜访量大时fpm子进程全部处于劳碌状态,backlog也塞满了,就会回绝新的连接,此时nginx再恳求,就会直接被拒。所以需要合理的设定backlog参数。
大部分参数只要系统默许的就可以了,我们只需要知道几个比力重要的参数设定,什么时候用到可以回过头查询相关说明
相关引荐:编程视频课程
以上就是php-fpm.conf配置文件中文及重要参数说明的具体内容,更多请关注百分百源码网其它相关文章!