PHP-FPM性能调优

1,984 阅读2分钟

PHP-FPM 是什么?

PHP-FPM 是 PHP 版本的 FastCGI 协议的实现,是一个 PHP FastCGI 进程管理器,负责管理一个进程池来处理 Web 服务器的 HTTP 动态请求。其基本工作原理为:服务启动时会先创建一个 master 进程,解析配置文件,初始化执行环境,再创建多个 worker 进程,当接收到一个 HTTP 请求时,master 进程将其转发给某个 worker 进程,worker 负责动态执行 PHP 代码,处理完成后返回给 Web 服务器。

配置

配置文件通常在 /usr/local/etc 目录下,修改 php-fpm.conf 文件。

  • 进程数配置

    pm = dynamic; # 表示使用的进程管理方式
    

    dynamic 表示动态分配,一般情况下都是使用 dynamic,由以下 四个参数决定子进程数:

    pm.max_children = 200; # 最大子进程数量
    pm.start_servers = 100; # 启动时创建的子进程数量
    pm.min_spare_servers = 5; # 最小空闲子进程数量,低于该值创建新进程
    pm.max_spare_servers = 180; # 最大空闲子进程数量,高于该值进行清理
    

    static 表示静态,只由 pm.max_children 参数影响子进程数量,一般一个 php-cgi 所耗费的内存为20-30M,需要根据服务器的配置合适的数量。

  • 进程最大请求数配置

    pm.max_requests = 10240;
    

    当一个php-cgi进程处理的请求数达到这个配置后,则会自动重启该进程,将内存释放给操作系统,避免内存泄漏导致系统宕机。

  • 进程最长执行时间配置

    request_terminate_timeout = 100;
    

    进程执行超过这个时间过会终止进程,nginx 给客户端返回502。

  • 开启慢日志

    request_slowlog_timeout = 2; # 开启慢日志,记录执行时间超过该值的日志
    slowlog = log/php-fpm.slow.log; # 慢日志保存路径