/

优化 PHP-FPM

TL;DR

cat php-fpm.conf | grep '^[^;]'
[www]
user = nobody
group = nobody
listen = 127.0.0.1:10071

#php-fpm进程启动模式,pm可以设置为static和dynamic和ondemand
#如果选择static,则进程数就数固定的,由pm.max_children指定固定的子进程数。
pm = dynamic

#如果选择dynamic,则进程数是动态变化的,由以下参数决定:
#子进程最大数
pm.max_children = 50
#启动时的进程数,默认值为: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 2
# 保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.min_spare_servers = 1
# 保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
pm.max_spare_servers = 3

static 还是 dynamic

很多人恐惧症来袭,不知道选什么好?

一般原则是:动态适合小内存机器,灵活分配进程,省内存。静态适用于大内存机器,动态创建回收进程对服务器资源也是一种消耗。

如果你的内存很大,有 8-20G,按照一个 php-fpm 进程 20M 算,100 个就 2G 内存了,那就可以开启 static 模式。如果你的内存很小,比如才 256M,那就要小心设置了,因为你的机器里面的其他的进程也算需要占用内存的,所以设置成 dynamic 是最好的,比如:pm.max_chindren = 8, 占用内存 160M 左右,而且可以随时变化,对于一半访问量的网站足够了。

慢日志查询

# 慢请求的记录日志,配合request_slowlog_timeout使用,默认关闭
slowlog = log/$pool.log.slow

# 当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'
request_slowlog_timeout = 10s

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

References

– EOF –