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中让人头疼的浮点数运算分析

    PHP中让人头疼的浮点数运算分析 在PHP的浮点数运算中,产生不准确结果的问题,常常让人十分头疼。出现这个问题的原因在于,浮点数在计算机内部是以二进制方式存储的,而二进制无法准确地表达所有的十进制数。 问题示例 $a = 0.2; $b = 0.1; $c = $a – $b; echo $c; 这段代码本意是计算0.2 – 0.1的结果,然后输出。不过输出…

    PHP 2023年5月26日
    00
  • nginx简单配置多个php服务实例教程

    下面是“nginx简单配置多个php服务实例教程”的完整使用攻略,包括问题原因、解决方法和两个示例说明。 问题原因 在使用配置多个php服务实例时可能会出现端口冲突的问题。这是因为nginx默认使用的端口是80,而php服务实默认使用的端口是9000,两者会发生冲突。 解决方法 以下是解决nginx配置多个php服务实例的方法: 修改php服务实例的端口 在…

    PHP 2023年5月12日
    00
  • 微信小程序中setInterval的使用方法

    当我们需要在微信小程序中定时执行某些任务的时候,可以使用setInterval函数。下面将详细介绍setInterval函数的使用方法和应用场景。 什么是setInterval setInterval是JavaScript语言提供的一个函数,用于定期调用指定的函数,重复执行该函数,直到 clearInterval() 被调用或者程序关闭。setInterva…

    PHP 2023年5月23日
    00
  • php实现首页链接查询 友情链接检查的代码

    要实现首页链接查询和友情链接检查的代码,我们可以利用 PHP 的 file_get_contents() 函数来获取网页源码,并使用正则表达式匹配需要检查的链接。 以下是详细的攻略: 步骤一:获取网页源码 首先,我们需要使用 PHP 的 file_get_contents() 函数来获取需要检查的页面的源代码,例如: // 指定需要检查的页面 URL $ur…

    PHP 2023年5月30日
    00
  • PHP基本语法总结

    首先,我们需要了解PHP是一门开源的、服务器端脚本语言,主要用于Web应用程序的开发、可嵌入HTML中使用,以及可以与数据库进行交互。 基本语法结构 PHP代码需要包含在<?php和?>之间,其中echo用于将内容输出至浏览器。示例如下: <?php echo "Hello World!"; //输出Hello Worl…

    PHP 2023年5月23日
    00
  • PHP7.1中使用openssl替换mcrypt的实例详解

    “PHP7.1中使用openssl替换mcrypt的实例详解” 背景 PHP 7.1 中,mcrypt 扩展已经被废弃,官方推荐使用 openssl 扩展替代,本文将详细讲解如何在 PHP 7.1 中使用 openssl 扩展替换 mcrypt 扩展。 准备工作 在开始之前,需要确认 PHP 版本是否为 7.1 及以上,以及是否安装了 openssl 扩展。…

    PHP 2023年5月26日
    00
  • 微信小程序环境下将文件上传到OSS的方法步骤

    要将文件上传到OSS,需要经过以下步骤: 步骤1:安装依赖 在小程序项目的根目录下,使用npm安装ali-oss和aliyun-sdk: npm install ali-oss aliyun-sdk –save 步骤2:在OSS中创建Bucket和AccessKey 在OSS中创建一个Bucket,并获取AccessKey ID和AccessKey Sec…

    PHP 2023年5月30日
    00
  • php中函数前加&符号的作用分解

    当在 PHP 中使用函数时,在函数的参数前面添加 & 符号可以实现引用传递,同时也可以使函数返回一个引用。 下面我们将详细介绍在 PHP 中如何正确地使用函数参数前的 & 符号。 引用传递 在 PHP 中,当函数传递一个变量时,它不会直接传递变量的值,而是会传递变量的副本。这意味着如果在函数内部修改变量值,函数外的变量值并不会受影响。 但是,…

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