首页 技术正文

PHP-FPM的配置与优化

gaosc 技术 2019-09-18 6535 0 phpphp-fpm

php-fpm 介绍

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个PHPFastCGI管理器,用于管理 PHP 进程池、接收和处理 Web 服务器的请求。PHP-FPM 会创建一个主进程,控制何时以及如何把 HTTP 请求转发给一个或多个子进程处理。

对于nginx的fastcgi和php的fastcgi的关系:

  • cgi: 对接标准输入和标准输出的程序,其实现与语言无关。HTTP服务器每次收到请求后,启动一个CGI进程并将请求传入,CGI进程完成后退出。这种fork-and-execute模式导致性能低下。

  • php-cgi: 包含php解释器的CGI程序(不是用php写的CGI程序),能够处理php请求。

  • fastcgi:一种用于更好的提供CGI功能的协议;fastcgi协议采用C/S结构,http服务器只需要包含fastcgi的C端模块,通过socket与支持fastcgi S端的CGI程序通信。这样既解决了CGI反复加载的问题,又可以将CGI程序和http服务器分离。nginx的fastcgi模块即fastcgi的C端。

  • php-fpm:  包含php解释器,实现了fastcgi的S端,并且提供了进程管理功能的程序。可以常驻内存并持续接受和处理php请求,并且能够控制进程的数量和生存周期。

php-fpmy优化配置

全局配置

emergency_restart_threshold = 60(建议值)
如果子进程在 emergency_restart_interval 设定的时间内收到该参数设定次数的 SIGSEGV 或者 SIGBUS退出信息号,则FPM会重新启动。

emergency_restart_interval = 1m
用于设定平滑重启的间隔时,单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。
这个两个设置的作用是,如果在指定的一段时间内指定的子进程失效了,让 PHP-FPM 重启。
这个两个设置默认是关闭的,建议开启

进程池配置

PHP-FPM 中有一个 Pool Definitions 的区域,意为进程池,通常建议一个 PHP 应用使用一个进程池。
PHP-FPM 配置文件有默认名为 www 的配置内容。
user = 运行 PHP 的非 root 用户
子进程运行的用户。必须设置。

group = 运行 PHP 的非 root 用户所属的用户组
子进程运行的用户组。如果没有设置,则默认用户的组被使用。

listen = 127.0.0.1:9000 或者 /path/to/unix/socket
设置接受 FastCGI 请求的地址。

listen.allowed_clients = 127.0.0.1
设置允许连接到 FastCGI 的服务器 IP 地址。默认情况,这个字段是注释掉了,建议开启。

pm = 生产环境 static
设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。
    static:子进程的数量是固定的(pm.max_children)。
    ondemand:进程在有需求时才产生(当请求时,与 dynamic 相反,pm.start_servers 在服务启动时即启动。
    dynamic:子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers。


pm.max_children =
设置 PHP-FPM 进程池中最多能有多少个进程。这个没有绝对正确值,要根据实际情况设置。
假设每个 PHP 进程使用 20-30M 内存,为整个 PHP-FPM 环境配置了 512 M 内存,那么可以设置为 17-25 中间值。

pm.start_servers =
设置启动时创建的子进程数目。仅在 pm 设置为 dynamic 时使用。

pm.min_spare_servers =
设置空闲服务进程的最低数目。仅在 pm 设置为 dynamic 时使用。必须设置。

pm.max_spare_servers =
设置空闲服务进程的最大数目。仅在 pm 设置为 dynamic 时使用。必须设置。

pm.max_requests = 1000
设置每个子进程重生之前服务的请求数。对于可能存在内存泄漏的第三方模块来说是非常有用的。如果设置为 ‘0’ 则一直接受请求,默认值:0。

slowlog =
慢请求的记录日志。
注意 PHP-FPM 进程所属的用户和用户组必须具有相应文件的写权限。

request_slowlog_timeout = 5
当一个请求该设置的超时时间后,就会将对应的 PHP 调用堆栈信息完整写入到慢日志中。

PHP脚本处理内存占用

memory_limit = 8M
该选项指定PHP脚本处理所能占用的最大内存,默认为8MB,如果您的服务器内存为1GB以上,则该选项可以设置为12MB以获得更快的PHP脚本处理效率。

PHP上传文件大小限制

upload_max_filesize = 2M
max_file_uploads = 3
该选项设定PHP所能允许最大上传文件大小,默认为2MB。根据实际应用需求,可以适当增大该设置,max_file_uploads表示单次请求最多只能上传 3 个文件。


打赏 支付宝打赏 微信打赏
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

Music