php-fpm配置参数优化及502解决办法
NGINX出现502Bad Gateway
其实我想说,网站出现502关NGINX屁事,不过,好多人喜欢搜索这个短句,好吧,于是我也只好…
好吧,我们先来了解一下,502/503/504 HTTP状态的意思
502(错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。 503(服务不可用) 服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。 504(网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
502 说白点就是NGINX向PHP获取信息,由于PHP通讯(php-fpm假死/php-fpm线程不够)造成NGINX无法从php获取信息,而返回的错误信息。
503 就是说服务器程式,NGINX未启动(未启动/假死)造成无法服务
504 这个,其实我以前看到过,后来没有看到过了,没有多少了解,不过,可以和和推敲了来,前端服务器,无法从后端服务器获取信息。可能是后端服务器程式假死/未启动造成的,当然,也有可能访问量过大,造成后端崩溃。
目前502的解决办是
修改php-fpm线程数,修改php-fpm.conf
内存小于等于256M,修改相应的参数为
pm.max_children = 40 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 6
内存小于等于512M,修改相应的参数为
pm.max_children = 60 pm.start_servers = 6 pm.min_spare_servers = 3 pm.max_spare_servers = 9
内存大于等于1G,修改相应的参数为
pm.max_children = 80 pm.start_servers = 8 pm.min_spare_servers = 4 pm.max_spare_servers = 12 修改/usr/local/php/etc/php-fpm.conf php 5.2调整:max_children的值 php 5.3以上版本调整:pm.min_spare_servers和pm.max_spare_servers的值适当增加 最大值可以按内存/2/20 的整数来算,最小值可以按内存/2/40 的整数来算,可以少点或多大,可以自己调整运行看看。 ************************************ 如果mysql安装时开启了innodb的话,内存在4G以上可以用/usr/local/mysql/share/mysql/ (mysql5.5在5.5在/usr/local/mysql/support-files/)下面的my-innodb-heavy-4G.cnf 替换/etc/my.cnf 1-2G的话,没开启innodb的话可以用my-huge.cnf,如开启了innodb需要修改配置文件启用。 *********************************** nginx可以调整 /usr/local/nginx/conf/nginx.conf 的worker_processes Nginx作者说的: 一般一个进程足够了,你可以把连接数设得很大。如果有SSL、gzip这些比较消耗CPU的工作,而且是多核CPU的话,可以设为和CPU的数量一样。或 者要处理很多很多的小文件,而且文件总大小比内存大很多的时候,也可以把进程数增加,以充分利用IO带宽(主要似乎是IO操作有block)。 现在大部分版本上也可以设置为:worker_processes auto; 自动调整 ***************************************** 所有调整均需要重启对应的程序使其生效。 建议改配置前备份一下配置文件,以便出错时恢复或查找错误。 内存大于等于1G,修改相应的参数为 pm.max_children = 25 pm.start_servers = 16 pm.min_spare_servers = 12 pm.max_spare_servers = 25