linux下的php-fpm参数配置介绍与参数优化说明

以下是详细讲解“linux下的php-fpm参数配置介绍与参数优化说明”的完整攻略。

什么是PHP-FPM?

PHP-FPM(FastCGI Process Manager)是PHP自带的一款解释器,它通过FastCGI协议与Web服务器进行通信,提高了PHP的运行效率。PHP-FPM 带来了更多的配置选项。

PHP-FPM的配置文件

PHP-FPM的配置文件由两部分组成:

  1. php-fpm.conf:主要定义全局配置,如日志路径、进程管理方式等
  2. pool.d/*.conf:每个进程池的配置文件

PHP-FPM的参数介绍

php-fpm.conf 参数介绍

以下是部分常用的配置参数说明:

  • pid:PID文件路径,默认 /var/run/php-fpm.pid
  • error_log:错误日志文件路径,默认 /var/log/php-fpm.log
  • syslog.facility:设定syslog监控器所使用的设施值(facility)。默认daemon
  • syslog.ident:会出现在syslog消息前缀中的字符串。默认php-fpm
  • log_level:错误日志的级别。默认notice
  • emergency_restart_threshold:主进程遇到的请求错误数,达到这个数时会重启。默认为0,表示禁用该功能
  • process_control_timeout:主进程在一次检查进程时进行等待的时间。默认为0

pool.d/*.conf 参数介绍

以下是部分常用的配置参数说明:

  • user/group:指定进程运行的用户和用户组
  • listen:指定绑定的地址(Unix或者TCP socket),如:
listen = /tmp/php-fpm.sock
listen = 127.0.0.1:9000
  • listen.backlog:指定 listen 最大的 pending 连接队列长度。默认 -1(backlog应该是操作系统自己限制的)
  • listen.allowed_clients:允许连接到这个程序的所有客户端的IP地址,如:
; 将允许所有来自 192.168.1.x 的客户端连接。
listen.allowed_clients = 192.168.1.0/24
  • pm:进程管理器,可选静态、ondemand 和 dynamic 三种方式
  • pm.max_children:进程池中最大进程数,默认 5
  • pm.start_servers:启动进程数,默认 2
  • pm.min_spare_servers:空闲状态时的最小进程数,默认 1
  • pm.max_spare_servers:空闲状态时的最大进程数,默认 3
  • pm.process_idle_timeout:进程闲置多少秒后被回收,默认 10s
  • request_terminate_timeout:单个请求最大执行时间,默认 0,表示不开启
  • request_slowlog_timeout:慢日志记录,超过多少秒的请求会被记录。默认 0,表示不记录
  • slowlog:慢日志文件路径,默认 /var/log/php-fpm/www-slow.log

PHP-FPM参数优化

工作负载和硬件各异,合适的参数可以提高PHP-FPM的运行效率和稳定性。

优化1:调整进程池大小

pm.max_children 指定进程池中的进程数量,过多会导致系统资源的浪费;过少会导致请求速度慢,因此需要为当前的请求工作量设置最佳值。

进程池的大小可以通过几种方式来调整。可以使用 systemctl status php-fpm.service 命令观察进程数量的变化,也可以使用 ab (Apache HTTP Server 的性能测试工具)来测试系统。

例如,以下是一份配置,可以作为一个参考:

pm.max_children = 30
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

优化2:启用慢日志

启用慢日志可以帮助定位PHP应用中的性能瓶颈。

例如,以下是一份慢日志配置的参考:

; 慢日志开启
request_slowlog_timeout = 10s

; 慢日志写入文件
slowlog = /var/log/php-fpm/www-slow.log
slowlog = /var/log/php-fpm/www-slow.log.%y%m%d

; 慢日志格式:$request_date,$filename,$seriousness,$query_string
request_slowlog_file = /var/log/php-fpm/www-slow.log
log_format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"

示例1:通过 ab 测试进程池大小

我们可以使用 ab 工具来测试当前 PHP-FPM 进程池的大小是否合适。PHP-FPM开始提高子进程的数量,直到我们达到一个瓶颈或内存不足为止。

比如我们可以使用如下的命令进行测试:

ab -c 100 -n 200 http://192.168.1.210/index.php
  • -c 100 表示并发请求数(concurrent requests)为 100,这是我们想测试的事情,即同时发起多少个请求
  • -n 200 表示请求数(requests)为200,也就意味着我们会发送200个请求

我们来修改 PHP-FPM 进程池的配置文件,以达到最优配置:

pm.max_children = 30
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

示例2:利用慢日志定位性能瓶颈

我们可以利用慢日志功能,来定位 PHP-FPM 中的性能瓶颈。如果我们开启了慢日志,当 PHP-FPM 执行一个耗时大于或等于 $request_slowlog_timeout 的脚本时,PHP-FPM 就会记录这些访问日志到指定的 slowlog 日志文件中。

例如,我们可以在 pool.d/*.conf 中增加如下的配置:

request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/www-slow.log

这将允许将所有执行时间大于或等于 10 秒的请求写入 /var/log/php-fpm/www-slow.log 日志文件中。

我希望以上这份攻略能够对你有所帮助,如果还有什么疑问或需要补充的请随时指出。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:linux下的php-fpm参数配置介绍与参数优化说明 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • php DES加密算法实例分析

    PHP DES加密算法实例分析 什么是DES加密算法? DES(Data Encryption Standard)即数据加密标准,是一种流行的对称加密算法。它的安全性和可靠性已被广泛证实,并被广泛应用于许多不同的领域,例如金融、电子商务等。 DES加密算法使用相同的密钥对数据进行加密和解密,因此它也被称为对称加密算法。在DES加密算法中,数据被分成64位的块…

    PHP 2023年5月26日
    00
  • 用PHP与XML联手进行网站编程代码实例

    下面我将详细讲解使用PHP与XML联合编程的攻略。 前言 在网站编程中,我们常常需要使用到一些数据存储和数据交换的功能,而XML是存储和交换数据的一种常见格式。PHP可以很方便地读取和处理XML文件,因此PHP与XML联合编程是网站开发中非常常见的情况。 步骤 第一步:创建XML文件 我们可以使用任何一个文本编辑器来创建XML文件,下面是一个简单的例子: &…

    PHP 2023年5月23日
    00
  • PHP编程中八种常见的文件操作方式

    PHP编程中八种常见的文件操作方式 介绍 在PHP编程中,文件操作是一项至关重要的任务。PHP语言提供了多种方法和函数,方便程序员对文件进行读写、创建、删除和修改等操作。以下是八种常见的文件操作方式: 打开文件 读取文件内容 写入文件内容 关闭文件 创建文件 删除文件 修改文件权限 获取文件详细信息 打开文件 PHP提供了fopen()函数来打开文件,该函数…

    PHP 2023年5月23日
    00
  • 浅谈php中的循环while、do…while、for、foreach四种循环

    下面是 “浅谈php中的循环while、do…while、for、foreach四种循环” 的攻略: 1. while 循环 while循环是php中最基本的循环控制结构。while循环会在每次循环开始之前检查它的循环条件,只要条件为真就会重复执行循环体中的代码。例如: $i = 1; while ($i <= 10) { echo $i; $i+…

    PHP 2023年5月26日
    00
  • 微信小程序使用wxParse解析html的实现示例

    下面是“微信小程序使用wxParse解析html的实现示例”的完整攻略。 什么是wxParse wxParse是一款支持 HTML 和 Markdown 解析的微信小程序富文本解析插件,支持图片、链接、强调、斜体等常用标签。相比其他富文本解析插件,wxParse 更加轻量、使用更加方便。 如何使用wxParse 1. 安装wxParse 通过 npm 安装:…

    PHP 2023年5月30日
    00
  • php实现断点续传大文件示例代码

    下面是实现PHP断点续传大文件的完整攻略。 一、需求分析 在处理上传较大的文件时,一般会遇到上传过程中断、上传速度慢等情况。为此,需要实现断点续传功能,以提高上传效率。 二、实现步骤 判断是否是首次上传文件。 根据请求头中的Range字段,获取已上传的文件大小。 如果是首次上传文件或读取上次上传进度失败,那么从开始处上传;否则,从当前已上传的位置继续上传。 …

    PHP 2023年5月27日
    00
  • php下intval()和(int)转换使用与区别

    在PHP中,intval()和(int)都是用来将一个数据转换为整型数据类型的函数/运算符,但它们之间存在一些细微的差别。 intval() intval()是PHP中用来将一个数据类型转换为整型数据的函数,它的语法是: intval($value, $base = 10); 第一个参数表示需要转换的值,第二个参数可选,表示要转换的数字的进制,默认值是10进…

    PHP 2023年5月26日
    00
  • PHP面向对象之旅:深入理解static变量与方法

    下面是关于“PHP面向对象之旅:深入理解static变量与方法”的完整攻略: 什么是static变量和方法 在PHP面向对象编程中,static是一个非常重要的关键字。它可以用来修饰类的属性和方法,使其变为静态属性和静态方法。静态属性和方法是指它们只属于类,而不属于类的实例。也就是说,不需要创建对象就可以访问和使用它们。 如何定义static变量和方法 在P…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部