【影响范围】
中间层服务挂了,导致所有请求中间服务的接口无服务响应。部分功能不可用
【故障表现】
所有到中间层的请求全部报错,没有服务响应,监控群里面大量报警
【处理过程】
1、11.12左右,业务服务、大数据服务,出现大量报警,提示
“java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: mm”
2、打开 pinpoint 工具 查看 数据源监控情况
发现 中间层服务里面 查询 某数据库库 数据的连接数被用完了,并且持续了7分钟左右
3、此时 又发现 sql慢查询报警 此报警频繁出现,时间点吻合,说明就是该sql执行导致连接数被用完,并且执行时间过长(120多秒)从而导致后续的请求处于等待状态,包括consul的心跳检测请求, 故报不可用的中间服务
【原因分析】
执行多个慢查询,慢查询时间持续长,将连接数用完,没有及时释放,导致之后的请求阻塞在获取数据库连接上,包括consul的心跳检测请求,心跳检测不通过,在consul处于不可用状态,导致了事故
【改进措施】
1、优化涉及接口 已解决
2、增加连接数
3、梳理系统内可能存在的风险的接口,优化