网站经常出现502错误详解

1.目前lnmp一键安装包比较多的问题就是502 BadGateway,大部分情况下原因是在安装php前,脚本中某些lib包可能没有安装上,造成php没有编译安装成功。解决办法:可以尝试根据lnmp一键安装包中的脚本手动安装一下,看看是什么错误导致的。
2.在php.ini里,eaccelerator配置项一定要放在Zend Optimizer配置之前,否则也可能引起502 BadGateway
3.在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf将其中的max_children值适当增加。

通过命令查看服务器上一共开了多少的 php-cgi 进程

ps -fe |grep "php"|grep -v "grep"|wc -l

查看已经有多少个php-cgi进程用来处理tcp请求

netstat -anop |grep"php"|grep -v "grep"|wc -l

一般来说,一台服务器的正常情况下每一个php-cgi要耗费的内存为20M左右。如果我就将此值设为80,那么也就是说大概要耗费服务器1600M内存。

相关参数解读
pm.max_children静态方式下开启的php-fpm进程数量。
pm.start_servers动态方式下的起始php-fpm进程数量。
pm.min_spare_servers动态方式下的最小php-fpm进程数量。
pm.max_spare_servers动态方式下的最大php-fpm进程数量。
针对我的服务器情况调整这几个值为
pm.max_children = 20
pm.start_servers = 12
pm.min_spare_servers = 5
pm.max_spare_servers = 20

4.php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time改为300
5.磁盘空间不足,如mysql日志占用大量空间
6.查看php-cgi进程是否在运行
7.Nginx 502 BadGateway的含义是请求的PHP-CGI已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致PHP-CGI进程终止,一般来说Nginx 502Bad Gateway和php-fpm.conf的设置有关。php-fpm.conf有两个至关重要的参数,一个是max_children,另一个是request_terminate_timeout,但是这个值不是通用的,而是需要自己计算的。在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf将其中的max_children值适当增加。

在配置nginx.conf 的时候,有一项是指定错误日志的,默认情况下你不指定也没有关系,因为nginx很少有错误日志记录的。但有时出现问题时,是有必要记录一下错误日志的,方便我们排查问题。
error_log 级别分为 debug, info, notice, warn, error, crit  默认为crit, 该级别在日志名后边定义格式如下:
error_log  /your/path/error.log crit;  
crit 记录的日志最少,而debug记录的日志最多。如果你的nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并没有看到有意义的信息,那么就可以调一下错误日志的级别,当你调成error级别时,错误日志记录的内容会更加丰富。