php-fpm参数详解

以下为32G内存服务器php-fpm配置:

[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /home/www/wwwlogs/php-fpm.log
log_level = notice

[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 80    #最大子进程数
pm.start_servers = 40   #dynamic启动时的进程数量
pm.min_spare_servers = 40    #保证空闲进程的最小数,低于此数值会创建
pm.max_spare_servers = 80    #保证空闲进程的最大数,高于此数值会杀死
pm.max_requests = 1024
pm.process_idle_timeout = 10s  #空闲进程超时时间
request_terminate_timeout = 100
request_slowlog_timeout = 0   #当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'
slowlog= var/log/slow.log #php-fpm慢日志位置

参数解释:

pm = xxx,指定进程管理方式,有3种可供选择:static、dynamic和ondemand。

三种参数的区别:

pm = static,始终保持一个固定数量的子进程,这个数由pm.max_children定义,这种方式很不灵活,也通常不是默认的。

pm = dynamic,启动时会产生固定数量的子进程(由pm.start_servers控制)可以理解成最小子进程数,而最大子进程数则由pm.max_children去控制,子进程数会在最大和最小数范围中变化。闲置的子进程数还可以由另2个配置控制,分别是pm.min_spare_servers和pm.max_spare_servers。如果闲置的子进程超出了pm.max_spare_servers,则会被杀掉。小于pm.min_spare_servers则会启动进程(注意,pm.max_spare_servers应小于pm.max_children)。
 
pm = ondemand,这种模式和pm = dynamic相反,把内存放在第一位,每个闲置进程在持续闲置了pm.process_idle_timeout秒后就会被杀掉,如果服务器长时间没有请求,就只会有一个php-fpm主进程。弊端是遇到高峰期或者如果pm.process_idle_timeout的值太短的话,容易出现504 Gateway Time-out错误,因此pm = dynamic和pm = ondemand谁更适合视实际情况而定。
 
pm.max_requests = 1024,设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为0,则一直接受请求,最终导致内存不足,网站不能访问,如下图所示:

prequest_terminate_timeout = 100,设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用。设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。

常用命令:

查看每个PHP-FPM进程的内存占用:ps -ylC php-fpm --sort:rss

查看消耗内存最多的前 40 个进程:ps auxw|head -1;ps auxw|sort -rn -k4|head -40

查看PHP-FPM的平均内存占用:ps –no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s
", sum/NR/1024,"M") }'
原文地址:https://www.cnblogs.com/ltlinux/p/11357446.html