分类
php

PHP-FPM参数调优

在实际工作中,发现很多服务器上安装的 PHP-FPM,都是按照默认配置运行的。实际上,默认的配置所能发挥的性能及其有限。

本文采用的 PHP 版本为 7.2.14。所以,这一篇,我们来讲解一下有关于 PHP-FPM 的配置以及优化。

启动 PHP-FPM 服务

在编译安装完成之后,安装目录当中有两个默认的配置文件,分别是/{prefix}/etc/php-fpm.conf.defualt以及/{prefix}/etc/php-fpm.d/www.conf.default,这这两个配置文件重命名或者复制,如下:

sudo cp /path/php-fpm.conf.default /path/php-fpm.conf
sudo cp /path/www.conf.default /path/www.conf

完成上一步之后,我们在 PHP 解压后的源码目录中,找到 PHP-FPM 的 systemd 配置文件,在/{php socure dir}/sapi/fpm/php-fpm.service,将复制或移动到/etc/systemd/system目录下:

sudo cp /path/php-fpm.service /etc/systemd/system/php-fpm.serivce

接着,打开之前重命名的www.conf配置文件,当中有关于 php-fpm 的启动用户以及用户组的配置,如下:

user = php-fpm
group = php-fpm

创建 PHP-FPM 的用户以及用户组:

sudo useradd -s /sbin/nologin -M php-fpm

最后启动 php-fpm 服务,使用 systemd:

sudo systemctl start php-fpm 
sudo systemctl status php-fpm ## 查看状态,防止启动失败
sudo systemctl enable php-fpm ## 设置为开机启动

配置优化

进程配置

PHP-FPM 首先会启动一个 Master 进程,其作用为 Fork 子进程并且分配具体的 HTTP 请求的子进程进行处理。

我们在上文中提到过的www.conf中找到pm的配置项,其配置有两种可能,分别为static以及dynamic。介绍如下:

配置项描述
static表示在 PHP-FPM 启动的时候就一次性 FORK 若干进程
dynamic表示在运行过程中动态调配子进程的数量
ondemand在服务启动的时候并不创子进程,当有请求的到来的时候才创建

如果在一台服务器上,存在多个服务的话,我们可以将该配置项设置为dynamic,根据请求的负载而决定子进程的数量,有利于资源的充分利用。

如果在一台服务器上,只存在 PHP-FPM 单个服务,或其他服务对内存的依赖不大的情况下,我们可以将该配置项设置为static,对性能进行充分利用。

除了PM这个配置项外,还有一些其他的配置项,解释如下表:

配置项描述
pm.max_children配置最大的子进程数量
pm.start_children服务启动时开启的进程数量,当pm配置为dynamic时有效
pm.min_spare_servers当服务空闲时最小进程数量,当pm配置为dynamic时有效
pm.max_spare_servers当服务空闲时最大的进程数量,当pm配置为dynamic时有效
pm.max_requests单一子进程最大处理请求数量,当达到该值时自动重启进程

pm.max_children这个配置项建议根据服务器的相关配置(内存)设置得尽可能大,一般来说每个进程消耗内存为 20MB 左右,所以根据这个参考值进行设置。这个值设置得越大,就能同时处理越多的请求数。但是要量力(内存)而为。

pm.start_childen,一般设置为 10 到 20之间。

pm.max_requests,该值是为了防止内存泄露,如果经常性出现 502 错误,则将该配置项设置的尽可能大一些,比如 10240。

总结

这一篇讲解了 PHP-FPM 在PHP编译安装完成后的服务启动,以及相关的配置优化。

发表评论

邮箱地址不会被公开。 必填项已用*标注