PHP(三)php-fpm.conf配置文件

一    CGI

cgi工作模式('fork-and-execute'): 每有一个用户请求到来,首'先fork子进程',然后'处理请求',处理完请求之后'就结束'这个子进程,后续'其它请求'也是这样'一个流程'

更具体: 每一次web请求都会有'启动'和'退出'过程

cgi的好处:就是完全'独立于任何服务器',仅仅是做为'中间分子';例如:提供'接口'给nginx和php

cgi应用场景: '动态(dynamic)'生成'网页'

缺点: cgi一直背负'性能低下'、'高资源消耗'的恶名

++++++++++++'处理流程'++++++++++++

1)客户端'(浏览器)' -->发送请求('/index.php') --> web服务器('nginx'、'apache')

2)Web服务器('nginx')接收'index.php'请求后;首先对'请求参数'进行'解析','判断'是'cgi脚本'请求,而web'服务器自身'不能'直接处理'

3)Web服务器'进而'会启动'对应的 CGI 程序'-->这里就是'PHP的解析器',PHP解析器会'解析php.ini文件','初始化'执行环境,然后'处理请求'

4)该'CGI对应的脚本解释器-->进程'处理完之后,会以'STDOUT的形式-->规定CGI规定的格式'返回给'WEB服务器'

5)WEB服务器会'封装',以'html形式'响应给'客户端-->浏览器'

CGI程序: 可以理解为是'运行在Web服务器上'的一段'物理程序',方便WEB服务器在'识别出是CGI请求之后','调用'该CGI程序'fork子进程'进行处理

二    FastCGI的演变

(1)FastCGI是什么

FastCGI是:'交互程序'与'Web服务器'通用的'协议接口',是早期'CGI'(Common Gateway Interface)的一个'变种'

'变'种: 体现在不是以CGI的'fork-and-execute'方式处理请求,而是系统的'常驻进程'持续不断的处理请求

(2)PHP处理器

++++++++++什么是'PHP处理器'(PHP handlers)?++++++++++

 1)首先需要'牢记':任何一种'Web服务器'(Apache、Nginx等)都是'被设计成'处理'html、图片等静态资源的'

 2)Web服务器'自身并不能解'释任何'动态脚本'(PHP、Python、Perl、Lua)

 3)PHP处理器就是用来'解释Web应用中的PHP代码',并将它'解释'为HTML或其他'静态资源',然后将解析的结果'传给Web服务器',最后再由'Web服务器发送'给用户

 4)大多数的'Web服务器'都'不能解析PHP代码',因此它需要一个'能解析PHP代码的程序',这就是PHP处理器

+++++++​'apache和nginx'常见的'PHP处理器'+++++++​

(1)PHP最常用的方式是以'模块的方式(mod_php)'运行在Apache中,也是Apache运行PHP的'默认'方式但

(2)Nginx中'使用'的是'PHP-FPM'

三    PHP-FPM

(1)PHP-FPM和FastCGI关系

(2)PHP-FPM是什么

0)全称'FastCGI Process Manager'-->'FastCGI进程管理器'

1)PHP-FPM是一个'实现了Fastcgi的程序',被'PHP官方收了'

2)PHP的解释器是'php-cgi',php-cgi只是个'CGI程序',他自己本身'only'只能'解析请求','返回结果'给we服务器,'不会进程管理'

3)所以就'出现了'一些'能够调度php-cgi进程'的'程序',这就是PHP-FPM

其它调度'php-cgi'进程的程序: 由'lighthttpd'分离出来的'spawn-fcgi'

+++++++++++++'补充理解'+++++++++++++

(1)fastcgi是一个'接口协议',php-fpm'实现了'这个协议

(2)php-fpm的'管理对象'是php-cgi

备注: 'php-cgi'也是fastcgi的'进程管理器',只是有缺点,因此有了'php-fpm'

(3) php-cgi与php-fpm的联系(为什么要有php-fpm)

相同点: php-cgi与php-fpm一样也是'一个fastcgi进程管理器'

差异性: 一旦'修改了php.ini'配置文件后,php-cgi进程'没办法平滑重启',而'php-fpm'可以

php-cgi的'问题'在于 

  1、php-cgi变更php.ini配置后'需重启'php-cgi才能让'新的php-ini生效','不可以'平滑重启 

  2、直接杀死php-cgi进程,php就不能运行了,'PHP-FPM'和'Spawn-FCGI'就没有这个问题,守护进程会'平滑'重新生成'新的子进程'

php-fpm的'处理机制':是'新的worker'用'新的配置','已经存在的旧worker'处理完手上的活就'可以歇着了',通过这种机制来'平滑过度'

CGI、FastCGI和PHP-FPM关系图解

四    php-fpm的配置文件

fpm官方配置

php.ini与php-fpm.conf配置文件的区别

前提条件: 假设rpm安装了'php74'

(1)主配置文件解读

+++++++++++++'主配置文件'+++++++++++++

/etc/opt/remi/php74/php-fpm.conf

1)PHP-FPM是一个'PHP FastCGI管理器'

2)'php-fpm.conf'配置文件用于'控制PHP-FPM管理进程'的'相关参数'

'参数': 工作(worker)'子进程的数量'、'运行权限'、监听端口、'慢请求'等等

PHP-FPM'配置文件'为 php-fpm.conf,其'语法类似' php.ini 

①  全局配置

日志级别: alert(必须立即处理), error(错误情况), warning(警告情况), 'notice(一般重要信息)', debug(调试信息). 默认: notice.

emergency_restart_threshold = 60

emergency_restart_interval = 60s

表示在'emergency_restart_interval'所设'值内',出现SIGSEGV或者SIGBUS错误的'php-cgi进程数如果超过' emergency_restart_threshold个,php-fpm就会'优雅重启'

备注: 这两个选项一般'保持默认值'

(2)子配置文件解读

+++++++++++++'子配置文件'+++++++++++++

/etc/opt/remi/php74/php-fpm.d/www.conf

'更准确':/etc/opt/remi/php74/php-fpm.d/*.conf

②   进程池

通过'监听不同的端口'和'不同管理选择'可以定义'多个'不同的'子进程池',进程池被用与记录和统计,对于fpm能够'处理进程池数目'并'没有限制'

'解读'该配置文件

关于PHP-FPM的backlog的默认值

重点: '进程池管理器'如何'控制子进程'的'数量'

实验现象-->'idle空闲的子进程数目:5'

需求1: 显示'基本'status页面

http://www.foo.bar/status       -->默认'text/plain'
http://www.foo.bar/status?json
http://www.foo.bar/status?html
http://www.foo.bar/status?xml

需求2: 显示'更完整'的status页面

http://www.foo.bar/status?full
http://www.foo.bar/status?json&full
http://www.foo.bar/status?html&full
http://www.foo.bar/status?xml&full

备注: 各个'参数的含义'看配置文件的说明

(1)  我们可以使用php-fpm.conf'配置慢日志'

slowlog = /usr/local/var/log/php-fpm.log.slow
request_slowlog_timeout = 5s

效果: 当某个'请求的时间超过了5秒',就会在'慢日志中记录'相应的记录

注意: 上面的时间5s,'不能忽略了单位',相应的还有其他单位,m分,h时

(2) '解读信息'

php-fpm慢日志会记录下'进程号'、'脚本名称'、'具体哪个文件哪行代码'的'哪个函数'执行时间过长:

[20-Nov-2019 11:30:38] [pool www] pid 11876
script_filename = /var/www/ceshi/c.php
[0xb70fb88c] sleep() /var/www/ceshi/c.php:2

解读: 通过日志,我们就可以知道'第2行的sleep 函数有'点问题,这样我们就能'追踪问题'了,'debug'及'异常排查'神器

1)'php.ini 文件'的 'memory_limit'

2)'php-fpm.conf 子文件 www.conf'的 php_admin_value[memory_limit] = 128  --> 该'www-->线程池'默认的'内存限制'

'/etc/opt/remi/php74/php-fpm.d/www.conf'

备注: 打开了'phpinfo()',结果显示memory_limit的值是'php-fpm.conf'中的,不是'php.ini'

说明: reload'也可生效'

说明: '平均'每个php-fpm子进程内存'大约占' = 进程池'总内存' / 子进程'数目'

五    配置不合理导致的问题

(1)常见错误及解决办法整理

(2)报错原因

原因: 由于将'[www]池中'user和group'注释'了

六    PHP的补充知识

(1) 为什么PHP不适合'密集型(大数据量)运算'的场景

PHP的'语言特性'决定PHP'不适合'做大数据量运算,PHP语言由C写的,'PHP处于C基础之上',PHP的所有运算处理流程'需要转化为C语言',PHP和C想比'性能肯定输了',并且PHP语言还有一些'环境问题'、'语言特性',相比于C而言的'开销要大很多'

(2) PHP'适合场景'

适合衔接WebServer与后端服务,WebServer来了请求交给PHP,PHP'做一些校验'、一些'初始化数据处理',将'请求转发'交给后端,'等待后台响应'

备注: '后端'可能是'缓存、DB等'其他业务,后端响应之后,PHP再作为纽带,将信息传递给WebServer,这是PHP擅长的。

备注: PHP也擅长做'UI呈现',也就是'配合模板引擎'做'模板输出',其实就是一些;字符串文本处理'

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值