502(Bad Gateway)

502出现的原因

一般是服务端负载比较高,导致连接超时,我们向服务器发送请求,由于服务器当前连接太多或者服务器宕机,导致服务器方面无法给于正常的响应,产生此类报错。

如何排查和解决502问题

  1. 查看NGINX日志,主要是查看是后端哪个服务,哪个接口导致的
  2. 现在一般会有多台服务器,看对应的接口是只有一台服务器返回502,还是说都有,如果都有,并且都是502,那么一般猜测服务挂掉了
  3. 如果是每一台都有断断续续的502,那么可以猜测是Tomcat服务的问题了,可以去查看Tomcat的访问日志,现在基本上都是使用SpringBoot,默认是不会开启access.log了,所以开启需要加个配置(这只是简单的配置)
#日志开关
server.tomcat.access-log-enabled=true
#日志格式
server.tomcat.access-log-pattern=%h %l %u %t "%r" %s %b %D
#日志输出目录,这里是设置为当前目录下
server.tomcat.basedir=./

如果有日志的话,可以查看出现502的时候的请求,查看请求是否进入到了Tomcat,如果没有进入,那么请求可能被丢弃了
那么请求为什么会被Tomcat丢弃呢?Connector配置

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"          redirectPort="8443"/><Connector/>

查看Connector配置,简单来说,当连接超过maxConnections,不超过acceptCount时,会继续接收连接,当超过acceptCount时,则会丢弃或者超时处理

The maximum length of the operating system provided queue for incoming connection requests when maxConnections has been reached. The operating system may ignore this setting and use a different size for the queue. When this queue is full, the operating system may actively refuse additional connections or those connections may time out. The default value is 100.

如何解决?

maxConnections和accept默认值为10000+100=10100,当达到10100时,就会拒绝连接了,那调整这两个值即可。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐