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使用array_chunk函数将一个数组分割成多个数组

    关于如何使用array_chunk函数将一个数组分割成多个数组,可以按照以下几个步骤进行: 1. 了解array_chunk函数 首先,需要了解array_chunk函数的基本用法。array_chunk函数的作用是将一个数组按照一定的大小,分割成若干个小的数组。其基本语法为: array array_chunk(array $array, int $siz…

    PHP 2023年5月26日
    00
  • 用PHP创建PDF中文文档

    创建PDF文档是现代Web开发中常见的任务之一。在PHP中,我们可以使用多个开源库来处理PDF文档。 一般来说,创建PDF文档的过程可以分为以下几个步骤: 安装PDF库:需要先安装一个支持PDF创建的PHP库。常用的PDF库有TCPDF、FPDF、mPDF等。 设置PDF文档参数:设置PDF的标题、页码、页面尺寸、页边距等。 添加页面内容:添加文本、图片、表…

    PHP 2023年5月26日
    00
  • Yii2压缩PHP中模板代码的输出问题

    当使用Yii2框架时,可以很容易地压缩PHP中模板代码的输出。一般在应用的生产环境下,开启模板压缩可以大大提高页面加载速度,从而提升用户体验。 下面是完整攻略及示例: 一、安装依赖包 Yii2需要使用 yisoft/yii2-composer 和 kartik-v/yii2-widget-select2 包以实现模板压缩的功能,如果您的 composer.j…

    PHP 2023年5月26日
    00
  • php和asp利用Shell.Application来执行程序的代码

    利用Shell.Application可以让PHP和ASP执行本地系统的一些命令和程序,下面将详细讲解利用Shell.Application来执行程序的攻略。 准备工作 在使用Shell.Application之前,需要先确保服务器端的操作系统已经安装了COM组件。对于Windows系统,这个组件通常都是默认安装的。 使用Shell.Application启…

    PHP 2023年5月23日
    00
  • 基于PHP中的常用函数回顾

    基于 PHP 中的常用函数回顾 在 PHP 中,常用函数是编写和处理 Web 应用程序的关键。这些函数可以大大简化我们的开发过程,并让我们的代码变得更加简洁和易于理解。在本攻略中,我们将回顾 PHP 中的一些常用函数。 字符串处理函数 strlen($str) strlen() 函数用于获取字符串的长度,返回字符串的字节数。 例如,检查字符串“Hello W…

    PHP 2023年5月26日
    00
  • 戏说编码发展史

    当讲述“戏说编码发展史”的攻略时,我们可以按照以下流程进行: 1. 确定主题 首先,我们需要明确“戏说编码发展史”的主题,以便更好地整理相关内容。例如,我们可以将主题定义为“戏说编码的起源、发展和应用”。 2. 收集资料 获取和整理相关资料与主题密切相关。这些资料可以是历史、技术、文化、实际应用或其他方面。这样做有助于我们更好地理解和解释有关“戏说编码”的内…

    PHP 2023年5月26日
    00
  • PHP mkdir()无写权限的问题解决方法

    要解决PHP mkdir()无写权限的问题,我们可以通过以下步骤进行解决: 1. 确认目录权限 首先要确定你想要创建目录的上层目录有写权限。比如,如果你想要在/webroot/下创建一个新目录,那么/webroot/目录必须具有写入权限。 可以通过ls -la命令查看当前目录的权限,如下所示: $ ls -la /webroot/ drwxr-xr-x. 3…

    PHP 2023年5月27日
    00
  • php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析

    关于php中判断方法或函数是否存在,PHP提供了以下三个函数: function_exists(): 用于判断函数是否存在 method_exists(): 用于判断方法是否存在 is_callable(): 用于判断函数或方法是否可调用 function_exists() function_exists()函数用于判断指定的函数是否被定义。该函数需要传入一…

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