优化PHP运行性能:合理选择PHP-FPM管理模式和配置进程参数

本文详细解释了PHP-FPM的进程管理模式,包括静态、动态和按需,重点讲解了如何根据服务器硬件如4核8G配置PHP-FPM,推荐动态模式,并提供了一组最佳实践配置参数。
摘要由CSDN通过智能技术生成

        PHP-FPM,全称 PHP FastCGI Process Manager,是一个 PHP FastCGI 的管理器,主要用于提高 PHP 的运行性能。本文将详细讲述如何合理配置 PHP-FPM,以及针对不同的服务器硬件,如何进行专门的调优。

一、理解 PHP-FPM 进程管理模式

        PHP-FPM 提供了三种进程管理模式,分别为 staticdynamic 和 ondemand

  1. 静态(static):这种方式会预设固定数量的子进程(pm.max_children),并且这个数量在运行过程中不会改变,过高的静态子进程数会浪费服务器内存,而过低则无法应对并发量较大的情况。这种模式适用于系统负载相对稳定的环境,比如内部系统。优点是没有新的进程的生成和消亡,可以减少系统负载;缺点是如果并发量超过预设的静态子进程数,新的请求会因为没有可用子进程而被放弃。

  2. 动态(dynamic):在这种方式下,PHP-FPM 会根据负载情况动态调整子进程的数量,其中 pm.start_servers 定义了启动时的子进程数,pm.min_spare_servers 和 pm.max_spare_servers 则定义了空闲子进程的最小和最大数量。当请求量增加时,PHP-FPM 会创建更多的子进程来应对,而在请求量减少时,多余的子进程会被干掉以释放资源。动态模式适合于负载量较大且波动的应用环境,比如面向公众的网站。

  3. 按需(ondemand):按需模式在没有请求时不会生成任何子进程,它只有在有请求时才生成新的子进程,同样的,当子进程处理完请求并闲置超过 pm.process_idle_timeout 的设定时间后,子进程会被干掉。按需模式适合于系统资源紧张并且请求量较小的环境,比如低配的 VPS。

二、如何配置 PHP-FPM

        配置文件主要为 /etc/php/版本/fpm/php-fpm.conf 和 /etc/php/版本/fpm/pool.d/www.conf

php-fpm.conf 的配置

        这是 PHP-FPM 主配置文件。在此文件中,你可以设置守护进程的 PID 文件位置,错误日志文件位置等:

[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log

www.conf 的配置

        这是站点配置文件,你可以在此文件中设置站点的用户、用户组,站点 sock 文件位置,进程管理模式等。

[www]
user = www-data
group = www-data
listen = /run/php/php7.2-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

        尤其需要注意的是 pm 和 pm.max_children 这两项配置,这两个选项的配置决定了 PHP-FPM 的进程管理模式以及最大子进程数量,是非常重要的性能调优参数。

三、服务器4核8G配置 PHP-FPM的最佳实践

        对于4核8G配置的服务器来说,我们首先假设每个 PHP-FPM 进程占用50MB内存,所以理论上最大子进程数为8G/50MB = 160个进程。然而在实际设置时,我们需要留出一部分内存给系统进程和其他程序使用,因此,合理的 pm.max_children 选项值可以设置在100~120之间。

        动态模式(dynamic)适用于此类型服务器,因为它能够在保证性能的同时,使服务器资源得到充分利用。具体的参数我们可以设置如下:

[www]  # 这个是 Pool 名称,每个 Pool 的名称应当是唯一的,不能有重复,一般默认叫 www。

user = www-data  # 指定运行 PHP-FPM 进程的用户,这里是 www-data。
group = www-data  # 指定运行 PHP-FPM 进程的用户组,这里是 www-data。

listen = /run/php/php7.2-fpm.sock  # 指定一个文件路径供 nginx 或 apache 服务器通过 fastcgi 协议调度 php-fpm 进程,这里用的是 unix socket 方式,也可以用 host:port 的方式。

listen.owner = www-data  # 设置 unix socket 文件的所有者,需要与 nginx 或者 apache 运行的用户一致。
listen.group = www-data  # 设置 unix socket 文件的所属用户组,需要与 nginx 或者 apache 运行的用户组一致。

pm = dynamic  # 进程管理模式,dynamic 表示动态管理子进程,另外还有 static , ondemand。

pm.max_children = 100  # 设置允许创建的最大子进程数
pm.start_servers = 10  # 启动时创建的子进程数,仅 dynamic 和 ondemand 模式有效。
pm.min_spare_servers = 5  # 空闲状态时,最小的子进程数,仅 dynamic 模式有效,当空闲进程数少于此值时,php-fpm 会创建新的子进程。
pm.max_spare_servers = 20  # 空闲状态时,最大的子进程数,仅 dynamic 模式有效,当空闲进程数多于此值时,php-fpm 会杀掉多余的子进程。
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值