最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 大话PHP-FPM配置与调优

    正文概述 转载于:掘金(程序员安安)   2020-12-30   434

    php-FPM是啥?

    PHP-FPM是一个PHP FastCGI的管理器,它实际上就是PHP源代码的补丁,旨在将FastCGI进程管理引进到PHP软件包中。

    CGI是啥?

    CGI全称“公共网关接口”(Common Gateway Interface),是HTTP服务器与其它机器上的程序进行通信的接口,其程序须运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。

    FastCGI是啥?优缺点。

    FastCGI是一个常驻型的CGI,它可以一直执行,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute模式)。它还支持分布式的运算,即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。 FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。我们知道,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保存在内存中并接受FastCGI进程管理器调度,那么就可以提供良好的性能、伸缩性等。 因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。

    FastCGI工作原理(配置数量与内存大小关联)

    Web服务器启动时,载入FastCGI进程管理器。 FastCGI进程管理器初始化,启动多个CGI解释器进程(PHP-CGI)并等待来自Web服务器的连接。 当客户端请求到达Web服务器时,FastCGI进程管理器选择并连接到一个CGI解释器,Web服务器将CGI环境变量和标准输入发送到FastCGI子进程PHP-CGI。

    FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回给Web服务器。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web服务器中)的下一个连接。而在CGI模式中,PHP-CGI在此便退出了。

    在上述情况中,可以想象CGI通常有多慢,每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展,并重初始化全部数据结构。而使用FastCGI,所有这些都只在进程启动时发生一次。另外,数据库持久连接可以工作。

    NOTE:FastCGI的主要优点是把动态语言和HTTP Server分离开来,所以Nginx与PHP/PHP-FPM经常被部署在不同的服务器上,以分担前端Nginx服务器的压力,使Nginx专一处理静态请求和转发动态请求,而PHP/PHP-FPM服务器专一解析PHP动态请求。

    PHP-CGI

    PHP-CGI是PHP自带的FastCGI管理器。 php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。 直接杀死php-cgi进程,php就不能运行了(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑重新生成新的子进程)。

    Nginx+PHP配置

    1、进程数优化

    cd /usr/local/php/etc
    # ll
    -rw-r--r-- 1 root root  1228 5月  27 14:07 pear.conf
    -rw-r--r-- 1 root root   480 5月  27 14:19 php-fpm.conf
    -rw-r--r-- 1 root root 23046 5月  27 14:07 php-fpm.conf.default
    -rw-r--r-- 1 root root 73862 6月   3 18:14 php.ini
    

    修改php-fpm.conf

    pm = dynamic # 动态分配,如果pm设置为static,那么其实只有pm.max_children这个参数生效
    pm.max_children = 200 # 静态方式下开启的php-fpm进程数量,在动态方式下他限定php-fpm的最大进程数
    pm.start_servers = 120 # 动态方式下的起始php-fpm进程数量
    pm.min_spare_servers = 5 # 动态方式空闲状态下的最小php-fpm进程数量
    pm.max_spare_servers = 180 # 动态方式空闲状态下的最大php-fpm进程数量
    

    NOTE:如果pm设置为dynamic,4个参数都生效。系统会在php-fpm运行开始时启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。

    2、最大请求数优化

    pm.max_requests = 10240
    

    NOTE:这个用来处理因为PHP解析器或引用的第三方库时,造成的内存泄露问题。 最大请求数:指一个php-fpm的工作进程在处理多少个请求后就终止掉。

    3、最长执行时间优化(php.ini)

    request_terminate_timeout = 100
    

    NOTE: php脚本取max_execution_time与request_terminate_timeout最小值作为脚本的超时时间。 这个是用来处理因为PHP执行时间超长而报502错误的解决。 这个时长配置可以在php.ini(max_execution_time)或php-fpm.conf中配置均可,为了不影响全局配置,可在php-fpm.conf中实现。 需要结合nginx.conf配置。

    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    

    4、慢日志

    request_slowlog_timeout = 2
    slowlog = /home/wwwlogs/php_fpm_slow.log
    

    NOTE: 开启慢日志的目的是为了跟踪分析那条php脚本执行的时间超过了设置的request_slowlog_timeout时长,如果超过这个设置时间,那么该脚本就会被记录下。

    5、关闭重启

    kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
    kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
    

    6、查看进程数

    # ps aux | grep -c php-fpm
    122
    

    # ps aux | grep php-fpm | wc -l
    122
    

    以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要戳这里PHP进阶架构师>>>实战视频、大厂面试文档免费获取---


    起源地下载网 » 大话PHP-FPM配置与调优

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元