首先了解connection rest报错的原因都有哪些?一般情况下是由下面情况引起的。
转发协议若设置为4层TCP转发且开启了健康检查,SLB会定期的去检测后端ECS指定端口的可用性,检测流程为:
1、SLB集群向后端ECS的指定端口进行三次握手2、握手建立后主动发送RST包断开连接在一些编程语言内,RST包会抛出异常,如Java语言,会抛出一个java.net.SocketException异常,错误信息为:Connection reset ,所以在程序这一侧看就会看到非常多的Reset异常。
解决思路
首先确定该异常为Connection reset,且来自SLB的集群(健康检查集群IP可参考:http://help.aliyun.com/knowledge_detail/5975216.html?spm=5176.7114037.1996646101.1.AB6G7j&pos=1),那么在程序中可以捕获该异常,同时不做任何处理。
解决方法(以Java程序为例):
一般来说java.net.SocketException会在read和write方法中抛出,若在read中跑出,e.printStackTrace()打印结果类似以下信息:
若write方法抛出,则是类似以下信息:
可以看到异常均为java.net.SocketException,错误信息中均有Connection reset字样,那么就可以在try-catch块中的catch块中加入判断是否来自SLB和异常信息是否含有Connection reset的代码:
这样在catch块中将来自SLB健康检查导致reset的异常单独抓出来,不作任何处理,然后不属于这部分的异常再照常处理即可,这样就屏蔽了健康检查造成的reset异常。
©2024 aliyunhn.com. All Rights Reserved 中科九洲科技股份有限公司-阿里云河南授权服务中心 豫B2-20080032-14 统计