php – 504 Gateway

最近运营反应客户在导出或者查询数据的时候返回504

如图:

第一个反应就是查询语句耗时太长了,所以把同事之前写的sql语句都打印出来,连接线上数据库执行explain操作,一看果然没有用到索引,执行的全表扫描,如图

而且还使用了临时表,还使用了排序,就是上篇我写的 为什么有了fiilesort就需要优化,然后就跟dba申请加索引,并说明原因。

除了业务上sql语句查询慢导致的超时,还有就是nginx的设置超时时间可以看一下,如果业务一直在处理,超过了nginx的设置的超时时间就会返回504

使用locate nginx 或者 ps aux|grep nginx 找到nginx的配置文件如图:

找到nginx.conf的配置文件后打开

这三个参数:

fastcgi_connect_timeout
fastcgi连接超时时间,默认60秒

fastcgi_send_timeout
nginx 进程向 fastcgi 进程发送请求过程的超时时间,默认值60秒

fastcgi_read_timeout
fastcgi 进程向 nginx 进程发送输出过程的超时时间,默认值60秒

这个时间就设置的有点长,因为之前没有优化sql语句的时候修改的,现在sql语句优化完了就需要修改下比如60

最后分析

nginx访问出现504 Gateway Time-out,一般是由于程序执行时间过长导致响应超时,例如程序需要执行90秒,而nginx最大响应等待时间为30秒,这样就会出现超时。
 
通常有以下几种情况导致

1.程序在处理大量数据,导致等待超时。
2.程序中调用外部请求,而外部请求响应超时。
3.连接数据库失败而没有停止,死循环重新连。

最后成功解决,特写篇记录一下

猜你喜欢

转载自www.cnblogs.com/weiluoyan/p/10439421.html