现象:
cat告警java.io.IOException: Broken pipe异常。
排查过程:
一、首先查了出现这个异常的原因,结果如下:
pipe是管道的意思,管道里面是数据流,通常是从文件或网络套接字读取的数据。
当该管道从另一端突然关闭时,会发生数据突然中断,即是broken。
所以发生的根本原因就是在对端已经关闭的管道里写数据。
二、什么场景发生?
1.其他同事的项目也有发生过该异常,是由于feign调用其他服务时,设置的1秒超时时间,请求超时引起。但是查看该接口并无调用其他服务,因此排除。
2.推测该接口请求时间长,客户端有设置超时时间自动断开连接。
询问前端,确实有timeout时间设置。但是设置的是20秒,发生该异常时后端接口返回时间一般在3-5秒之间,因此也排除这个原因。
3.在测试环境对请求该接口的页面进行测试,人为制造让这个接口的请求时间延长,再打开页面的瞬间关闭页面。此时后端服务仍然在处理请求,但是连接管道已关闭。再看后端日志,异常复现。
因此目前的推测是打开该页面时,时间过长,未等后端返回数据,用户就关闭了页面,导致连接中断。
解决方案:
后期对该接口进行优化,缩短请求时间。