Skip to content

Latest commit

 

History

History
214 lines (120 loc) · 5.62 KB

PHP-FPM配置选项.md

File metadata and controls

214 lines (120 loc) · 5.62 KB

PHP-FPM

FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。

它的功能包括:

  • 支持平滑停止/启动的高级进程管理功能;
  • 可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置);
  • stdout 和 stderr 日志记录;
  • 在发生意外情况的时候能够重新启动并缓存被破坏的 opcode;
  • 文件上传优化支持;
  • "慢日志" - 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以使用 ptrace或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢;
  • fastcgi_finish_request() - 特殊功能:用于在请求完成和刷新数据后,继续在后台执行耗时的工作(录入视频转换、统计处理等);
  • 动态/静态子进程产生;
  • 基本 SAPI 运行状态信息(类似Apache的 mod_status);
  • 基于 php.ini 的配置文件。

全局配置选项

  • pid

    pid文件的位置

  • error_log

    错误日志的位置

  • log_level

    错误的级别 alert 、error、warning、notice、debug、默认是notice

  • syslog.facility

    设置何种程序记录消息 默认daemon

  • syslog.ident

    为每条消息 添加前缀

  • emergency_restart_interval

    如果子进程在 emergency_restart_interval 设定的时间内收到该参数设定次数的 SIGSEGV 或者 SIGBUS退出信息号,则FPM会重新启动。0 表示“关闭该功能”。默认值:0(关闭)

  • process_control_timeout

    设置子进程接受主进程复用信号的超时时间 可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。

  • process_max

    fork的最大的fpm的进程数

  • process.priority

    设置master进程的nice(2) 优先级

  • daemonize

    设置php-fpm后台运行。默认是yes

  • rlimit_core

    设置master 进程打开的core最大的尺寸

  • events.mechaism

    设置fpm的使用的事件机制 select、pool、epoll、kqueue (*BSD)、port (Solaris )

  • systemd_interval

    使用systemd集成的fpm时,设置间歇秒数

运行时配置

  • listen

    设置接受的fastcgi请求的地址可用格式为:'ip:port','port','/path/to/unix/socket'。每个进程池都需要设置

  • listen.backlog

    设置backlog的最大值

  • listen.allowed_clients

    设置允许链接到fastcgi的ip地址

  • listen.owner listen.group listen.mode

    设置权限

  • user group

    fpm运行的Unix用户 必须设置的

  • pm

    设置进程管理器如何管理子进程

    • static 子进程是固定的 = pm.max_children
    • ondemand 进程在有需求时才产生
    • dynamic  子进程的数量在下面配置的基础上动态设置 pm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers
  • pm.max_children

    pm设置为staic时。表示创建的子进程的数量。

    pm为dynamic时,表示最大可创建的进程数

  • pm.start_servers

    设置启动时创建的子进程的数目。仅在 pm 设置为 dynamic 时使用 。就是初始化创建的进程数

  • pm.min_spare_servers

    设置空闲进程的最大数目

  • pm.process_idle_timeout

    秒。多久之后结束空闲进程

  • pm.max_requests

    设置每个子进程重生之前的服务的请求数。

  • pm.status_path

    fpm状态的页面的地址

  • ping.path

    fpm监控页面的ping的地址

  • ping.resource

    用于定于ping请求的返回响应 默认是pong

  • request_terminate_timeout

    设置单个请求的超时中止时间。

  • request_slowlog_timeout

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

  • slowlog

    慢请求的记录日志

  • rlimit_files

    设置打开文件描述符的限制

  • access.log

    访问日志

  • access.format

    acces log的格式

优化

内核调优

  • 调整linux内核打开文件的数量。
echo `ulimit -HSn 65536` >> /etc/profile
echo `ulimit -HSn 65536` >> /etc/rc.local
source /etc/profile 

PHP-FPM配置调优

  • 进程数调整

pm.max_children = 300; 静态方式下开启的php-fpm进程数量   

pm.start_servers = 20; 动态方式下的起始php-fpm进程数量   

pm.min_spare_servers = 5; 动态方式下的最小php-fpm进程数量   

pm.max_spare_servers = 35; 动态方式下的最大php-fpm进程数量

request_slowlog_timeout = 2; 开启慢日志 slowlog = log/$pool.log.slow; 慢日志路径

rlimit_files = 1024; 增加php-fpm打开文件描述符的限制

一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右 。

用内存/20 就大概算出最大的进程数。

一般初始化的进程有一个类似的公式

start_servers = min_spare_servers + (max_spare_servers - min_spare_servers) / 2;

如果长时间没有得到处理的请求就会出现504 Gateway Time-out这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现502 Bad gateway这个错误

  • 最大请求数

    最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn一个新的。

    这个配置的主要目的是避免php解释器或程序引用的第三方库造成的内存泄露。

    ​ pm.max_requests = 10240

  • 最长执行时间

    最大执行时间在php.ini和php-fpm.conf里都可以配置,配置项分别为max_execution_time和request_terminate_timeout。