深入php-fpm的理解

本文对比分析了cgi、fastcgi及php-cgi的工作原理,并详细介绍了php-fpm作为php-cgi进程管理工具的优势,包括其如何高效处理Web服务器请求、支持php.ini配置的平滑重启等特性。同时,文章提供了php-fpm配置的重要参数说明,帮助读者理解如何合理配置子进程数以提高并发量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    作为一个phper,我们都可以很简单部署自己的lnmp,但是对与php-fpm的实现原理却很少去关注,以下是我对php-fpm的见解,若有错误,请指出。

要去理解php-fpm,我们得先去了解一下概念。

cgi:公共网关接口,是实现php与nginx有效沟通的桥梁,但是有个缺点,每有一个请求都需要新建一个进程去处理,处理后关闭。进程启动需要很大的开销,造成资源的浪费。

fastcgi:是cgi的优化版,即常驻型的cgi,开始时fastcgi进程管理器启动多个php-cgi解析器子进程等待请求的连接,避免了每次请求都需要执行加载配置,加载扩展,初始化进程等一系列操作。缺点是因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解析器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。

php-cgi:PHP实现的自带的cgi程序,只能处理请求。缺点是,php-cgi变更php.ini配置后,需重启php-cgi才能让新的php-ini生效,不可以平滑重启。而杀死php-cgi,php程序就不能运行了。

php-fpm:php-cgi的进程管理工具,他负责管理一个进程池,来处理来自Web服务器的请求。能支持修改php.ini后的平滑重启。

以下图来简单说明
图片为其他平台获取
php-fpm配置的几个重要指标

emergency_restart_threshold = 10 #在指定的一段时间内,如果失效的PHP-FPM子进程数超过这个值,PHP-FPM主进程将优雅重启。
emergency_restart_interval = 1m #设定emergency_restart_interval 设置采用的时间跨度。

pm = dynamic                #选择进程池管理器如何控制子进程的数量  static:  对于子进程的开启数路给定一个锁定的值(pm.max_children)   dynamic:  子进程的数目为动态的,它的数目基于下面的指令的值(以下为dynamic适用参数)
pm.max_children = 16        #同一时刻能够存货的最大子进程的数量
pm.start_servers = 4        #在启动时启动的子进程数量
pm.min_spare_servers = 2    #处于空闲"idle"状态的最小子进程,如果空闲进程数量小于这个值,那么相应的子进程会被创建
pm.max_spare_servers = 16   #最大空闲子进程数量,空闲子进程数量超过这个值,那么相应的子进程会被杀掉。
pm.max_request = 500 		# 指的是进程达到多少请求后重启

控制php-cgi的进程数能有效的提高并发量,要注意避免内存的问题,因为进程的数目提升也代表内存的增多,那么如何配置一个合理的子进程数呢

  1. dynamic模式: [cpuNum + 20%, M/m] ,其中M与m分别代表PHP 能利用的内存数量与每个 PHP 进程平均使用的内存数量
  2. static模式:M/(m * 1.2),其中M与m分别代表PHP 能利用的内存数量与每个 PHP 进程平均使用的内存数量

参考来自:http://xiaohost.com/2614.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值