以下是详细讲解“linux下的php-fpm参数配置介绍与参数优化说明”的完整攻略。
什么是PHP-FPM?
PHP-FPM(FastCGI Process Manager)是PHP自带的一款解释器,它通过FastCGI协议与Web服务器进行通信,提高了PHP的运行效率。PHP-FPM 带来了更多的配置选项。
PHP-FPM的配置文件
PHP-FPM的配置文件由两部分组成:
- php-fpm.conf:主要定义全局配置,如日志路径、进程管理方式等
- 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技术站