php-fpm.conf配置文件中文描述和重要参数描述详解
php-fpm工作流程
php-fpm的全称是PHP FastCGI进程管理器
php-fpm启动后,会先读取php.ini,然后读取对应的conf配置文件,可以覆盖php.ini的配置。
启动php-fpm后,会创建一个主进程监听端口9000(可配置),主进程会根据fpm.conf/www.conf创建几个子进程,用于处理实际业务。
当有客户端(如nginx)连接到9000端口时,空闲的子进程将自行接受。如果所有的子进程都忙,待接受的新连接将被主机放入队列,等待fpm子进程空闲;
用于存储要接受的半连接的队列长度由listen.backlog配置.
php-fpm的全局配置描述
配置中的所有相对路径都是相对于php的安装路径的。
除了php-fpm.conf配置文件,通常还有其他*。用于配置进程池的conf配置文件(可以直接在php-fpm.conf中配置,也可以不配置)。不同的进程池可以由不同的用户执行,监听不同的端口,处理不同的任务。多个进程池共享一个全局配置。
include=/opt/remi/PHP 56/root/etc/PHP-fpm . d/*。conf加载其他配置文件。
php-fpm全局配置参数的中文描述:
PID=/opt/remi/PHP 56/root/var/run/PHP-fpm/PHP-fpm . PID # PID进程文件,默认为无。
error _ log=/opt/remi/PHP 56/root/var/log/PHP-fpm/error . log #错误日志位置,默认:安装路径# install _ prefix #/log/PHP-fpm . log .如果设置为syslog,日志将被发送到syslogd服务,而不是写入文件。
Syslog.facility=守护进程#将日志写入系统日志。linux还不够熟悉,暂时不能忽略它。
Syslog.ident=php-fpm#系统日志标记。如果运行多个fpm进程,则有必要区分日志属于谁。
Log_level=notice# log level,默认通知,可选:警报、错误、警告、通知、调试
紧急_重启_阈值=60 #,具有以下紧急_重启_间隔参数
emergency _ restart _ interval=60s #如果在此参数设置的时间内,SIGSEGV或SIGBUS的子进程数超过了emergency_restart_threshold参数设置的值,那么fpm将优雅地重新启动,值为0表示关闭功能。可用的单位是:s秒、m分钟、h小时和d天。
Process_control_timeout=0#设置子进程接受主进程复用信号的超时时间。这是每天都懂的,但是过了这个时间就不能再用了?
Process.max=128#动态管理子流程时,fpm最多可以分叉出多个流程,0表示没有限制,是所有可以提升流程的流程池之和,谨慎使用。
Process.priority=-19#设置子进程的优先级,当主进程以root身份启动时有效;如果未设置,子进程将继承主进程的优先级。该值的范围从-19(最高)到20(最低),默认情况下不设置。
为调试bug将daemon=yes #设置为no,默认值为yes。
Rlimit_files=1024#设置主进程可以打开的最大文件数,默认值为系统值。
Rlimit _ core=0 #主进程核心Rlimit限制值;可以选择无限制或整数=0,默认值为系统值。
Events.mechanism=epoll#事件处理机制,默认情况下自动检测,可选值:select、poll、epoll(linux=2.5.44)、kqueue、/dev/poll、port
Systemd_interval=10s#当fpm设置为系统服务时,应该以s、M、h、M和h为单位多久向服务器报告一次状态
Php-fpm进程池配置池定义:
您可以在不同的监听端口和不同的管理选项下运行任意数量的池,数量不限;
池的名称用于日志和统计信息。
用户=apache
group=apache
#以哪些用户和组的权限运行池fpm。
Apache可以访问一些目录,比如httpd服务
侦听=127.0.0.1:9000#要侦听的ip和端口。可以通过/path/to/unix/socket来监听unix socket,性能更好。
Listen.backlog=65535#不接受的套接字队列大小,FreeBSD和OpenBSD上为-1,其他平台默认为65535,高并发很重要,合理设置会及时处理排队的请求;积压太多,处理完之后,nginx会等待超时把这个插座从fpm上断开,那就是一个杯子。不要用-1,建议在1024以上,最好是2的幂。
#一个池共享一个积压队列,所有池进程都到这个队列接受连接。
#最大数量受系统配置cat/proc/sys/net/core/soma xconn限制。系统配置修改为:vim /etc/sysctl.conf,加上net . core . somaxcon=2000时最大数量为2000,那么php的最大积压量可以达到2000。
听着,主人=阿帕奇
listen.group=apache
监听模式=0660
#使用套接字连接模式时,指定具有unix套接字权限的用户,默认情况下与运行用户相同;使用tcp连接注释掉
听着。allowed _ clients=127.0.0.1 #设置允许连接到fpm的地址。例如,nginx将被连接,多个地址用逗号分隔。如果未配置,默认情况下可以连接任何地址。
Process.priority=-19#只有当主进程是根进程时,池进程的权限也有效。和全局一样,如果没有设置,会继承主进程的优先级。
Pm=启动时子流程的动态#管理模式,可选值:静态(启动时创建指定数量)、动态(启动时根据情况至少创建一个子流程)和ondemand(仅在需要时创建子流程)
Pm.max_children=5#这个池中最多同时有5个进程,三种管理方式都要配置
Pm.start_servers=2#fpm启动时创建2个子流程,仅适用于动态管理模式
Pm.min_spare_servers=2#服务器空闲时至少保留2个子进程。如果这个数字不够,就会创建,只适用于动态管理
PM。max _ spare _ servers=空闲时最多应该有几台3 #服务器,太多了会杀,只适用于动态动态管理
Pm.process_idle_timeout=10s#子进程空闲10s后会被杀死。
Pm.max_requests=500#每个子进程最多可以处理500个请求,可以防止内存泄漏。
pm.status_path字符串
#FPM状态页面的网址。如果未设置,则无法访问状态页面。默认值为无。
ping.path字符串
# ping监控页面的地址。如果未设置,将无法访问ping页面。此页面用于从外部检测FPM是否还活着,是否可以响应请求。请注意,它必须以斜杠(/)开头。
Ping.response字符串#用于定义Ping请求的返回响应。作为HTTP 200返回的文本/纯文本格式。默认值:pong。
设定工人的好(2)优先级(如果设定)。该值的范围从-19(最高优先级)到20(较低优先级)。默认值:未设置
检测路径时使用的前缀字符串#前缀
access . log=var/log/$ pool . access . log #访问文件日志是没有用的。例如,yii2记录了每次对index.php的访问,但只记录了真正的PHP文件。
slow log=var/log/$ pool . log . slow # PHP文件执行慢的日志会准确记录哪一行代码太慢,非常有用,设置时间后生效。
Request_slowlog_timeout=2s#在此运行时间之后,将写入慢速日志。
请求终止超时=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#创建工作流程时是否清除环境变量,如果是,则子流程getenv()无法访问$_ENV和$_SERVER。
保安。limit _ extensions=. PHP . PHP 3 . PHP 4 . PHP 5 #为了安全起见,请限制可以执行的脚本后缀
#为当前池指定另一个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、yesorno,其他类型的值需要使用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设置的,会覆盖之前的值。php.ini中disable_functions或disable _ classes定义的值不会被覆盖,但新的设置将被附加到原始值上。用php_admin_value或php_admin_flag定义的值不能被php代码中的ini_set()覆盖。
从5.3.3开始,PHP设置也可以通过web服务器进行设置。
Nginx通过Nginx锁与php-fpm通信:
应用场景:nginx和php-fpm在同一个服务器上,因此可以直接使用unixsocket进行进程间通信,而不是tcp端口通信,这样可以节省连接创建的时间,提高性能。
1.将php-fpm的listen设置为/opt/remi/PHP 56/root/var/run/PHP-fpm/php567-fpm.sock(可以使用相对路径),然后重启fpm自动创建PHP 567-fpm . sock文件
2.nginx的fastcgi_pass参数修改为UNIX :/opt/remi/PHP 56/root/var/run/PHP-fpm/PHP 567-fpm . sock;要通过php567-fpm.sock文件与fpm通信,需要确保php567-fpm.sock文件nginx具有访问权限。
总结:
Sock文件可以在任何地方创建,只要fpm有权限在该目录中写入文件,并且nginx有权限读取它们。Tcp连接会更稳定,因为有tcp协议保证数据的正确性,但是sock的数据复制和上下文切换少,资源占用也少。但是,sock只能在nginx和fpm在同一台机器上时使用。
Php-fpm进程状态监控
1.nginx配置:如果满足状态请求,直接转发给php
location~^/status${
fastcgi _ param SCRIPT _ FILENAME $ fastcgi _ SCRIPT _ name;
包括fastcgi _ params
fastcgi _ pass 127 . 0 . 0 . 1:9000;
}
2.fpm配置:pm.status_path=/status
3.然后重新fpm和nginx,你可以在浏览器里看到:
默认情况下,结果以文本/纯文本显示,参数可以传递?Json/html/xml分别获取Json格式的结果;参数full可以查看每个子进程的详细信息
池进程池名称
流程管理模式
开始时间过程是什么时候开始的
自进程运行以来,启动时间有多少秒
接受连接池总共接受了多少个连接
监听队列等待接受的连接数
最大监听队列fpm启动,历史上等待接受的最大连接数
监听队列len配置的监听队列的最大长度受listen.backlog和系统“cat/proc/sys/net/core/somaxcon”的限制,后者取最小值
空闲进程空闲进程的数量
活动进程正在处理进程的数量(加上限制,它是子进程的总数)
子进程总数
fpm启动的最大活动进程数,同时工作的最大进程数的历史记录
当达到的最大子进程管理模式为“动态”和“按需”时,该值是当子进程不足时,主进程创建更多子进程的次数。
慢速请求慢速请求的数量
在完整参数下
PID子流程id;
状态子进程状态(空闲、运行,);
开始时间子流程开始的时间;
自子进程启动后运行以来,该进程启动了多少秒;
请求当前子进程已经处理了多少个请求;
请求持续时间请求花费的纳秒数;
请求方法请求一个方法(GET,POST,);
请求URI请求参数;
内容长度发出发布请求时所请求内容的长度;
用户-用户(PHP_AUTH_USER)(或“-if notset);
脚本请求哪个php文件;
最后一个cpu请求消耗的cpu资源
上次请求内存上次请求消耗的峰值内存
如果进程空闲,则该信息记录最后一个请求的相关数据,否则为当前请求的相关数据。
积压配置问题
fpm子流程一次只能处理一个请求。如果积压设置得太大,则fpm子进程不会接受由客户端(如nginx)发起的请求,nginx将直接断开此连接。当fpm忙然后接受时,会发现它已断开,因此会报告一个错误。当积压设置得太小时,fpm子流程都很忙,积压已满,因此新连接将被拒绝。此时,如果nginx再次请求,将被直接拒绝。因此,有必要合理设置积压参数。
大多数参数只需要由系统默认。我们只需要知道几个重要的参数设置,什么时候使用,以后可以查看相关说明
版权声明:php-fpm.conf配置文件中文描述和重要参数描述详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。