万恶503

遇到问题不可怕,可怕的是问题来源广泛,不知从何下手,相信从事研发的小伙伴都会感同身受。

前段时间一直被503 service temporarily unavailable这个错误搞得焦头烂额,很多用户吐槽,操作页面不定时会弹出这个503的nginx错误,查询tomcat日志,没有异常信息,查询我们自己的nginx(注意:后面还有一个外部的nginx)日志,也未见异常。可是复现起来也有些难度,毕竟开发和测试环境都正常,只有生产环境不定时踩雷,为调试增加难度。

昨夜加班处理时,为了排查到底是tomcat将503的错误扔到nginx,还是nginx自己的503错误,特地在用户量偏少的时候,停止了自己内部服务器的nginx,然后发现还是不定时503,而且这个503页面居然还是提示是nginx的503。

 万恶503

 

那么,至此可以得出,应该不是我们内部nginx的问题,所以我开始查询tomcat的信息,jconsole连接远程后,发现tomcat的很多线程都是bio(tomcat7),所以一开始感觉是不是bio导致效率低下,所以将其协议换成httpNio,配置好tomcat的线程池,重启发现还是不定时报错,丈二和尚摸不着头脑,怀着疑惑做了个噩梦,第二天再查吧。

 万恶503

 

今日上班路上,突发奇想,我用httpClient发送get请求1000次,然后将响应503的这些信息拿出来看看,也许会有惊喜。果然,发现via(请求经过的协议)中出现一项SLB的信息。询问老大,才知道原来我们的系统,是通过域名转发至阿里云的负载均衡(Server Load Balanced,简称SLB),然后SLB中配置规则,将请求再转发至我们对应的web服务器。

那么问题来了,为啥SLB会出现503?

SLB也是基于nginx集群搭建的,阿里云上对SLB的服务有很多套餐,我们的套餐中QTS(每秒用户请求数)为1000,但是随着公司效益上升,用户量也逐渐上升,导致QTS可能会超出现有套餐上限,SLB就会拒绝这次请求,出现503。

 万恶503

 

果然,学无止境,借用某知名博主的话来说,会的越多,不会的越多!

 

欢迎大家和帝都的雁积极互动,头脑交流会比个人埋头苦学更有效!共勉!

公众号:帝都的雁

万恶503