3 FastCGI 进程管理器(FPM)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3 FastCGI 进程管理器(FPM)相关的知识,希望对你有一定的参考价值。
1 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 的配置文件。
2 从源代码编译
编译 PHP 时需要 --enable-fpm 配置选项来激活 FPM 支持。
以下为 FPM 编译的具体配置参数(全部为可选参数):
● --with-fpm-user - 设置 FPM 运行的用户身份(默认 - nobody) ● --with-fpm-group - 设置 FPM 运行时的用户组(默认 - nobody) ● --with-fpm-systemd - 启用 systemd 集成 (默认 - no) ● --with-fpm-acl - 使用POSIX 访问控制列表 (默认 - no) 5.6.5版本起有效
3 配置
FPM 配置文件为 php-fpm.conf,其语法类似 php.ini 。
1 php-fpm.conf 全局配置段
pid string PID文件的位置。默认为空。 error_log string 错误日志的位置。默认:安装路径 #INSTALL_PREFIX#/log/php-fpm.log。 log_level string 错误级别。可用级别为:alert(必须立即处理),error(错误情况),warning(警告情况),notice(一般重要信息),debug(调试信息)。默认:notice。 emergency_restart_threshold int 如果子进程在 emergency_restart_interval 设定的时间内收到该参数设定次数的 SIGSEGV 或者 SIGBUS退出信息号,则FPM会重新启动。0 表示“关闭该功能”。默认值:0(关闭)。 emergency_restart_interval mixed emergency_restart_interval 用于设定平滑重启的间隔时间。这么做有助于解决加速器中共享内存的使用问题。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。 process_control_timeout mixed 设置子进程接受主进程复用信号的超时时间。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。 daemonize boolean 设置 FPM 在后台运行。设置“no”将 FPM 保持在前台运行用于调试。默认值:yes。
2 运行配置区段
在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。 listen string 设置接受 FastCGI 请求的地址。可用格式为:‘ip:port‘,‘port‘,‘/path/to/unix/socket‘。每个进程池都需要设置。 listen.backlog int 设置 listen(2) 的半连接队列长度。“-1”表示无限制。默认值:-1。 listen.allowed_clients string 设置允许连接到 FastCGI 的服务器 IPV4 地址。等同于 PHP FastCGI (5.2.2+) 中的 FCGI_WEB_SERVER_ADDRS 环境变量。仅对 TCP 监听起作用。每个地址是用逗号分隔,如果没有设置或者为空,则允许任何服务器请求连接。默认值:any。 listen.owner string 如果使用,表示设置 Unix 套接字的权限。在Linux中,读写权限必须设置,以便用于 WEB 服务器连接。在很多 BSD 派生的系统中可以忽略权限允许自由连接。默认值:运行所使用的用户和组,权限为 0666。 listen.group string 参见 listen.owner。 listen.mode string 参见 listen.owner。 user string FPM 进程运行的Unix用户。必须设置。 group string FPM 进程运行的 Unix 用户组。如果没有设置,则默认用户的组被使用。 pm string 设置进程管理器如何管理子进程。可用值: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 int pm 设置为 static 时表示创建的子进程的数量,pm 设置为 dynamic 时表示最大可创建的子进程的数量。必须设置。 该选项设置可以同时提供服务的请求数限制。类似 Apache 的 mpm_prefork 中 MaxClients 的设置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 环境变量。 pm.start_servers in 设置启动时创建的子进程数目。仅在 pm 设置为 dynamic 时使用。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。 pm.min_spare_servers int 设置空闲服务进程的最低数目。仅在 pm 设置为 dynamic 时使用。必须设置。 pm.max_spare_servers int 设置空闲服务进程的最大数目。仅在 pm 设置为 dynamic 时使用。必须设置。 pm.max_requests int 设置每个子进程重生之前服务的请求数。对于可能存在内存泄漏的第三方模块来说是非常有用的。如果设置为 ‘0‘ 则一直接受请求,等同于 PHP_FCGI_MAX_REQUESTS 环境变量。默认值:0。 pm.status_path string FPM 状态页面的网址。如果没有设置,则无法访问状态页面,默认值:无。 ping.path string FPM 监控页面的 ping 网址。如果没有设置,则无法访问 ping 页面。该页面用于外部检测 FPM 是否存活并且可以响应请求。请注意必须以斜线开头(/)。 ping.response string 用于定义 ping 请求的返回响应。返回为 HTTP 200 的 text/plain 格式文本。默认值:pong。 request_terminate_timeout mixed 设置单个请求的超时中止时间。该选项可能会对 php.ini 设置中的 ‘max_execution_time‘ 因为某些特殊原因没有中止运行的脚本有用。设置为 ‘0‘ 表示 ‘Off‘。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。 request_slowlog_timeout mixed 当一个请求该设置的超时时间后,就会将对应的 PHP 调用堆栈信息完整写入到慢日志中。设置为 ‘0‘ 表示 ‘Off‘。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。 slowlog string 慢请求的记录日志。默认值:#INSTALL_PREFIX#/log/php-fpm.log.slow。 rlimit_files int 设置文件打开描述符的 rlimit 限制。默认值:系统定义值。 rlimit_core int 设置核心 rlimit 最大限制值。可用值:‘unlimited‘,0 或者正整数。默认值:系统定义值。 chroot string 启动时的 Chroot 目录。所定义的目录需要是绝对路径。如果没有设置,则 chroot 不被使用。 chdir string 设置启动目录,启动时会自动 Chdir 到该目录。所定义的目录需要是绝对路径。默认值:当前目录,或者根目录(chroot时)。 catch_workers_output boolean 重定向运行过程中的 stdout 和 stderr 到主要的错误日志文件中。如果没有设置,stdout 和 stderr 将会根据 FastCGI 的规则被重定向到 /dev/null。默认值:无。
以上是关于3 FastCGI 进程管理器(FPM)的主要内容,如果未能解决你的问题,请参考以下文章