- 问题出现:生产上运行的系统业务正常,当在查询数据时,出现后台异常,检查后台日志出现Broken Pipe异常;
如图示:
- Broken Pipe定义:通常发生在服务器端尝试向已关闭的套接字(客户端/端点)写入数据时失败;
- 问题解决思路:(微服务系统架构,请求链路:浏览器请求->A服务->B服务务)
- 首先A服务通过Feign调用B服务,但是B服务显示Broken Pipe异常,猜测超时引起;(Feign:声明式Http客户端)
- 检查B服务该接口是否正常响应;
- 检查B服务该接口处理耗时;
- 检查A服务Feign配置的connection-timeout客户端最大等待时长;
- 问题解决:
- B服务该接口正常响应;
- B服务该接口因数据量过大,并联表查询过多表导致耗时大于A服务器Feign客户端默认链接时长,而关闭该连接,导致Broken Pipe异常;
- Feign客户端默认连接时长:2秒
- 更改A服务Feign配置连接时长;
- 重启系统,该请求可正常访问;
- 问题解决方法:
- 因联表导致的耗时可拆分多条语句查询并根据具体情况设置对应缓存,减少耗时;(针对个人而言,毕竟具体问题,具体分析)
- 调整合适的连接时长;
- 设置本地缓存+重试机制;