502与504释义:
502 bad gateway 顾名思义 网关错误 后端服务器tomcat或php没有起来,应用服务的问题(前提是接入层7层正常的情况下)。
应用服务问题一种是应用本身问题;另一种是因为依赖服务问题比如依赖服务RT高,依赖的服务有大的读取(mysql慢查,http等),以至于调用方超过超时read时间;服务集群压力大时,也会出现502超时(502理解为不可响应或响应不过来,其实还是不可响应)。
504 gateway time-out 顾名思义 网关超时 一般计算机中的超时就是配置错了,此处一般指nginx做反向代理服务器时,所连接的服务器tomcat无响应导致的。
从网络角度,502已经与后端建立了连接,但超时;504与后端连接未建立,超时。
5打头的http回复码表示服务端出了问题,php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误,有可能是nginx的问题,也可能是后端php的问题
排查思路:
1、必现502,应用“挂了”
2、偶现502,资源不足,mysql连不上,等等,大都是资源不足的问题
排查逻辑:
Nginx通过配置fastcgi模块来提供对php支持
Nginx的问题:
- 可能php的执行时间比较长,超过了nginx的等待时间,把nginx默认的等待时间调长
fastcgi_connect_timeout 300;(默认60,不能超过75)
fastcgi_send_timeout 300; (默认60)
fastcgi_read_timeout 300; (默认60)
phpfpm的问题:/usr/local/php/etc/php-fpm.conf:
1. php有没有启动
- 2. 可以查看FastCGI进程数的配置与实际grep php-cgi出的进程数,相近的话,可以将FastCGI的进程数量调大
修改php配置文件中pm.max_children 默认10,改成30
- 3. 或者修改php配置文件中pm.max_requests的值,它表示每个CGI进程可以响应的请求数。
- 尝试增大php缓存区的大小,因为它默认是8k,可以改成128k
fastcgi_buffers 8 128k
补充: 如果nginx访问量突然增大的话,也会出现504的错误,因为nginx每秒回应的请求是有限制的,如果超过的话,只会对部分请求做出回复,这个可以过滤nginx日志中ip的请求数来判断是否被攻击。