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
- auth /* security/authorization messages */
- authpriv /* security/authorization messages (private) */
- cron /* clock daemon */
- daemon /* system daemons */
- ftp /* ftp daemon */
- kern /* kernel messages */
- lpr /* line printer subsystem */
- mail /* mail system */
- mark /* INTERNAL */
- news /* network news subsystem */
- security /* DEPRECATED */
- syslog /* messages generated internally by syslogd */
- user /* random user-level messages */
- 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