php-fpm.conf 配置参数详解及优化

emergency_restart_threshold = 10

在指定的一段时间内,如果失效的php-fpm子进程数超过这个值,php-fpm主进程优雅重启

emergency_restart_interval = 1m

设定emergency_restart_threshold 设置采用的时间跨度,s(econds), m(inutes), h(ours), or d(ays)

user = www

拥有这个php-fpm进程池中子进程的系统用户。要把这个设置的值设为运行php应用的非根用户的用户名。

group = www

拥有这个php-fpm进程池中子进程的系统用户组。要把这个设置的值设为运行php应用的非根用户的所属的用户组名。

listen = 127.0.0.1:9000

php-fpm进程池监听的ip地址和端口号,让php-fpm只接受nginx从这里传入的请求。127.0.0.1:9000让指定的php-fpm进程池监听从本地端口9000进入的连接。

可以使用任何不需要特殊权限(大于1024)且没被其他系统进程占用的端口号。

listen.allowed_clients = 127.0.0.1

可以向这个php-fpm进程池发送请求的ip地址(一个或多个)。为了安全,把这个设置为127.0.0.1,即只有当前设备能把请求转发给这个php-fpm进程池。默认情况下,这个是被注释掉的。

pm.max_children = 51

这个设置设定任何时间点php-fpm进程池中最多能有多少个进程。这个设置没有绝对正确的值,应该测试你的php应用,确定每个php进程需要使用多少个内存,然后把这个设置设为设备可能内存能容纳的php进程总数。对大多数中小型php应用来说,每个php进程要使用5-15M内存,假如我们使用的设备为这个php-fpm进程池分配了512可用的内存,每个进程大约10M,就是51个进程。

pm.start_servers = 3

php-fpm启动时php-fpm进程池中立即可用的进程数。同样的,这个设置也没有绝对的正确值。对大多数中小型php应用来说,设置2或者3。这么做是为了先准备好的三个进程,等待请求进入,不让php应用的头几个http请求等待php-fpm初始化进程中的进程。

pm.min_spare_servers = 2

php应用空闲时php-fpm进程池中可以存在的进程数量最小值。这个设置的值一般与php.start_servers设置的值一样,用于确保新进入的http请求无需等待php-fpm在进程中重新初始化进程。

pm.max_spare_servers = 4

php应用空闲时php-fpm进程池中可以存在的进程数量最大值。这个设置的值一般比php.start_servers设置的值要大些,用于确保新进入的http请求无需等待php-fpm在进程池中重新初始化进程。

pm.max_requests = 1000

回收进程之前,php-fpm进程池中各个进程最多能处理的http请求数量。这个设置有助于避免php扩展或者库因编写拙劣而导致不断泄漏内存。建议设置未1000,可根据应用的需求做调整。

slowlog = /path/to/slowlog.log

这个设置的值是一个日志文件在系统文件中的绝对路径。这个日志文件拥有记录处理时间超过N秒的http请求信息,比便找出php应用的瓶颈,进行调试。php-fpm进程池属于的用户和用户组必须有这个文件的写入权限。

request_slowlog_timeout = 5s

如果当前http请求的处理时间超过指定的值,就把请求的回溯信息写入slowlog设置指定的文件。把这个设置的值设置为多少,取决于你认为多长时间算久。一开始,可以设置为5s,s(econds), m(inutes), h(ours), or d(ays)