当前位置: 首页 > 后端技术 > PHP

php中php-fpm的工作原理

时间:2023-03-30 01:43:53 PHP

1.CGI是一种服务器与后台语言交互的协议。有了这个协议,开发者可以使用任何语言来处理服务器转发的请求,动态生成内容,并保证传输的数据是标准格式的(它规定了哪些数据以什么格式传输(URL、querystring、POSTdata,HTTPheader等)),方便开发者。2、fastCGI首先,FastCGI会先启动一个master进程,解析配置文件,初始化执行环境,然后启动多个worker进程。当请求进来时,master将其传递给worker,然后worker可以立即接受下一个请求。这样一来,避免了重复劳动,效率自然就高了。而当worker不够用的时候,master可以根据配置预先启动几个worker等待。当然,当空闲的worker过多时,会停止一些,这样既提高了性能又节省了资源。这就是FastCGI的进程管理。3、php-fpmmaster进程只有一个,负责监听端口和接收服务器请求,而worker进程一般有多个(具体数量根据实际需要配置),每个进程内嵌带一个PHP解释器,也就是PHP代码真正执行的地方,下面是我机器上FPM的进程:1个master进程,2个worker进程。从FPM收到请求到处理完成,具体流程如下1)。FPM的主进程接收请求。2).master进程根据配置分配一个具体的worker进程来处理请求。如果没有可用的进程,则返回错误。这就是为什么我们在使用Nginx时经常遇到502错误的原因。3).工作进程处理请求并在超时时返回504错误。4).请求处理结束,返回结果。4php-fpm配置文件pid=run/php-fpm.pid#pid设置,默认是安装目录下的var/run/php-fpm.pid,建议打开error_log=log/php-fpm.log#错误日志,默认为安装目录下的var/log/php-fpm.loglog_level=notice#Errorlevel。可用的级别有:alert(必须立即处理)、error(错误情况)、warning(警告情况)、notice(一般重要信息)、debug(调试信息)。默认值:通知。emergency_restart_threshold=60emergency_restart_interval=60s#表示如果在emergency_restart_interval设置的值内出现SIGSEGV或SIGBUS错误的php-cgi进程数超过emergency_restart_threshold,php-fpm将优雅重启。这两个选项一般保持默认值即可。process_control_timeout=0#设置子进程接受主进程复用信号的超时时间。可用单位:s(秒)、m(分钟)、h(小时)或d(天)默认单位:s(秒)。默认值:0。daemonize=yes#在后台执行fpm,默认值为yes,如果为了调试,可以改成no。在FPM中,可以运行具有不同设置的多个进程池。可以为每个进程池单独设置这些设置。listen=127.0.0.1:9000#fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为:'ip:port'、'port'、'/path/to/unix/socket'。每个进程池都需要设置。listen.backlog=-1#backlog数,-1表示无限制,由操作系统决定,把这一行注释掉即可。backlog含义参考:http://www.3gyou.cc/?p=41listen.allowed_clients=127.0.0.1#允许访问FastCGI进程的IP,任意设置为无限制IP,如果要设置其他的nginxhosts也可以访问对于这个FPM进程,listen应该设置为本地可访问的IP。默认值为任意。每个地址都用逗号分隔。如果没有设置或者为空,则允许任何服务器请求连接user=wwwgroup=www#启动进程的账号和组pm=dynamic#对于专用服务器,pm可以设置为static。#如何控制子进程,选项有静态和动态。如果选择static,子进程的固定数量由pm.max_children指定。如果选择dynamic,则由以下参数决定:pm.max_children#,最大子进程数pm.start_servers#,启动时的进程数pm.min_spare_servers#,保证空闲进程的最小数,如果空闲进程小于这个值,则创建一个新的子进程pm.max_spare_servers#,保证最大空闲进程数,如果空闲进程大于这个值,这个会被清理掉pm.max_requests=1000#设置每个子进程重生之前服务的请求数。对于那些可能存在内存泄漏的第三方模块非常有用。如果设置为“0”,则始终接受请求。相当于PHP_FCGI_MAX_REQUESTS环境变量。默认值:0。pm.status_path=/status#FPM状态页面的URL。如果未设置,则无法访问状态页面。默认值:无。munin监控会使用ping.path=/ping#FPM监控页面的pingURL。如果不设置,则无法访问ping页面。该页面用于对外检测FPM是否存活并可用响应请求。请注意,它必须以斜杠(/)开头。ping.response=pong#用来定义ping请求的返回响应。返回为HTTP200的文本/纯格式文本。默认值:pong。request_terminate_timeout=0#设置单次请求超时终止时间。此选项可能会影响php.ini。由于某些特殊原因,ini设置中的“max_execution_time”对于中止正在运行的脚本没有用。将其设置为“0”表示“关闭”。当502错误频繁出现时,您可以尝试更改此选项。request_slowlog_timeout=10s#当一个请求在设置的超时时间后到期时,相应的PHP调用栈信息将被完整写入慢日志。设置为'0'表示'关闭'slowlog=log/$pool.log.slow#记录慢速请求的日志,使用rlimit_files=1024withrequest_slowlog_timeout#设置文件打开描述符的rlimit限制。默认值:系统定义值默认可打开句柄为1024,可以用ulimit-n查看,用ulimit-n2048修改。rlimit_core=0#设置corerlimit的最大限制值。可用值:'unlimited'、0或正整数。默认值:系统定义值。chroot=#启动时的Chroot目录。定义的目录需要是绝对路径。如果没有设置,chroot将不会被使用。chdir=#设置启动目录,启动时会自动Chdir到该目录。定义的目录需要是绝对路径。默认值:当前目录,或/目录(chroot时)catch_workers_output=yes#在执行期间将stdout和stderr重定向到主错误日志文件。如果未设置,stdout和stderr将根据FastCGI规则重定向到/dev/null。默认值:空。