php-fpm.conf 配置详解

简单介绍下 php-fpm 配置意思,并不做任何优化相关建议。
[php 官方手册关于 php-fpm 的介绍](http://php.net/manual/zh/install.fpm.configuration.

pid设置,该文件存放 php7.0-fpm 的进程 id
pid = /run/php/php7.0-fpm.pid

错误日志的位置
error_log = /var/log/php7.0-fpm.log

系统日志的调用类型,如下默认为 damon

  1. auth /* security/authorization messages */
  2. authpriv /* security/authorization messages (private) */
  3. cron /* clock daemon */
  4. daemon /* system daemons */
  5. ftp /* ftp daemon */
  6. kern /* kernel messages */
  7. lpr /* line printer subsystem */
  8. mail /* mail system */
  9. mark /* INTERNAL */
  10. news /* network news subsystem */
  11. security /* DEPRECATED */
  12. syslog /* messages generated internally by syslogd */
  13. user /* random user-level messages */
  14. uucp /* UUCP subsystem */

;syslog.facility = dameon

syslog_ident 会被添加到每条日志消息的前面,通常设置为记录该日志程序的名字
;syslog.ident = php-fpm

错误级别. php-fpm.log纪录的等级。可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.
log_level = notice

emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。0 表示 '关闭该功能'. 默认值: 0 (关闭).
SIGSEGV 无效的内存引用,可能是内存地址和合法导致的;SIGBUS通常是由 内存地址未对齐导致的(可以通过man 7 signal可以查看所有信号)

;emergency_restart_threshold = 0
;emergency_restart_interval = 0

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

动态方式下开启的php-fpm进程的最大数量
;process.max = 128

处理nice(2)的进程优先级别-19(最高)到20(最低)
;process.priority = -19

设置 fpm 在后台运行
daemonize = yes

设置主进程文件描述符rlimit的数量
;rlimit_files = 1024

设置主进程文件描述符rlimit最大核数
;rlimit_core = 0

处理 event 事件的机制,默认会自动选择
;events.mechanism = epoll

fpm 健康检查间隔
;systemd_interval = 10

如果没有制定,将用全局 prefix 替代
;prefix = /path/to/pools/$pool 如果没有制定,将使用全局prefix替代

启动进程的用户和用户组,FPM 进程运行的Unix用户, 必须要设置

user = www-data
group = www-data

接受 FatCGI 请求的地址
listen = /run/php/php7.0-fpm.sock

当有客户端(比如nginx)有请求时,空闲子进程会自己去accept,如果子进程全部处于忙碌状态,新进的待accept的连接会被master放进队列里,等待fpm子进程空闲;这个存放待accept的半连接的队列有多长,就是由这个参数设置的
;listen.backlog = -1

监听进程的用户和组

listen.owner = www-data
listen.group = www-data
;listen.mode = 0660

允许监听的客户端 ip
listen.allowed_clients = 127.0.0.1

php-fpm进程启动模式,pm可以设置为static和dynamic和ondemand
static:对于子进程的开启数路给定一个锁定的值(pm.max_children)
dynamic:子进程的数目为动态的,它的数目基于下面的指令的值
pm.max_children: 同一时刻能够存货的最大子进程的数量
pm.start_servers: 在启动时启动的子进程数量
pm.min_spare_servers: 处于空闲"idle"状态的最小子进程,如果空闲进程数量小于这个值,那么相应的子进程会被创建
pm.max_spare_servers: 最大空闲子进程数量,空闲子进程数量超过这个值,那么相应的子进程会被杀掉。
ondemand: 在启动时不会创建,只有当发起请求链接时才会创建(pm.max_children,pm.process_idle_timeout)

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.process_idle_timeout = 10s #ondemand 空闲进程超市时间
pm.max_requests = 500  #在派生新的子进程之前,每个子进程应该处理的请求数目

配置一个URI,以便查看fpm状态页
状态页描述:
  accepted conn: 该进程池接受的请求数量
  pool: 进程池的名字
  process manager: 进程管理,就是配置中pm指令,可以选择值static,dynamic,ondemand
  idle processes: 空闲进程数量
  active processes: 当前活跃的进程数量
  total processes: 总的进程数量=idle+active
  max children reached: 达到最大子进程的次数,达到进程的限制,当pm试图开启更多的子进程的时候(仅当pm工作在dynamic时)
;pm.status_path = /status

FPM 监控页面的ping网址。可以用于外部检测 fpm 是否存活并且可以相应请求,必须以斜线(/)开头。
ping.path = /ping

用于定义 ping 请求的返回相应,返回 http 200 的格式文本
ping.response = pong

请求的访问日志
access.log = log/$pool.access.log

设定访问日志的格式,相对比于nginx 的 access.log,此日志记录的信息更利于做性能上的分析,可以记录 cpu, memory,time 
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"

用于记录慢请求
;slowlog = log/$pool.log.slow

慢日志请求超时时间
;request_slowlog_timeout = 0

终止请求超时时间,在 worker 进程杀掉之后,提供单个请求的超时时间
;request_terminate_timeout = 0

设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024
;rlimit_files = 1024

设置内核对资源的使用限制,用于内核转储
;rlimit_core = 0

启动时的chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用.
更改linux系统的根 (root) 目录,系统读取到的目录和文件将不在是旧系统根下,而是新根下,那么这样就可以增强系统的安全性
;chroot =

设置启动目录,启动时会自动chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时)
;chdir = /var/www

重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null
;catch_workers_output = yes

你可能感兴趣的:(php-fpm.conf 配置详解)