php-fpm参数的调优以及nginx 502 504处理。

502 Bad Gateway 这种情况排除配置文件错误,剩下的就是资源问题了。主要从php-fpm入手。
504 Gateway Time-out 这种情况通常就要从fastcgi的连接,发送,读取时间和buffer的优化来解决。

php-fpm参数设置

首先要优化的php-fpm的进程数量,进程数量是否够用可以通过查看php worker进程数目,和正在使用的进程数量做对比,如果总的进程数量和正在使用的进程数量较为接近的时候,就表示此时PHP进程已经快不够用了,需要增大进程的数量。

进程数量
ps -ef | grep 'php-fpm'|grep -v 'master'|grep -v 'grep' |wc -l

正在使用的进程
netstat -anp | grep 'php-fpm'|grep -v 'LISTENING'|grep -v 'php-fpm.conf'|wc -l

进程数量是要考虑到机器性能和内存来进行配置,我这里的服务器是4G内存情况下。以下是php-fpm的调优是的主要参数。

# static 和dynamic  static:适合流量相对稳定的场景 dynamic:适合流量浮动大的场景
# 一般会选择dynamic 来动态控制进程的增加和减少以提高资源利用率。
pm = dynamic

# 最大子进程数 也就是当访问过多,最多有多少个进程来处理
pm.max_children = 40    # 最大子进程数

# 默认启动的进程数量
pm.start_servers = 20   # 启动的进程数

# 空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.min_spare_servers = 20

# 空闲进程数最大值,如果空闲进程大于此值,此进行清理
pm.max_spare_servers = 40 

# 进程处理完多少请求后自动重启也可以设置为0。
pm.max_requests = 1024 

--------------------------
# 下面几个参数很少做改动,但具体还要根据业务而定。

# 表示限制进程持续多少秒后kill掉
pm.process_idle_timeout = 10s

# 单个请求超时时间 0为不限制	
request_terminate_timeout = 0  

# 脚本执行最大时间,如系统调用sleep和http请求,数据库操作,等响应的时间不算在内
# php.ini设置
max_execution_time = 300

# 0表示关闭慢日志,大于0 表示一个脚本执行超过指定时间的话则会记录到慢日志里,这里根据业务需求来进行设置,会增加一定的IO。
request_slowlog_timeout = 0

# 慢日志
slowlog = var/log/slow.log

nginx配置文件里的fastcgi参数设置

# 连接和发送时间一般设置为300秒
fastcgi_connect_timeout 300;	#fastcgi连接超时时间,默认60秒
fastcgi_send_timeout 300;	#nginx 进程向 fastcgi 进程发送请求过程的超时时间,默认60秒
fastcgi_read_timeout 300;	#接收fastcgi请求响应的超时时间,默认值60秒


# buffsize可以适当进行调整,2倍方式来进行增加
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;