Broken pipe异常分析报告
1.错误描述
ClientAbortException: java.io.IOException: Broken pipe
可能出现原因:
TCP服务端write数据时,收到SIGPIPE信号(连接已经终止)
场景:
- TCP握手尚未结束时,连接已经close;
- 服务端收到一次read,但write了多次;
- 连接通道被占满,新连接被拒绝时,client中断了所有连接。
2.分析过程
2.1.初步排查
每次出现该异常时,总是伴随/im/getUsercInfos.json接口的调用。
2.1.1具体现象
- 异常记录时间=接口请求记录时间(server连接write前记录)-(2至10)ms;
- 总是ios设备爆出;
- 总是h端爆出。
2.1.2分析
可能性一:
在请求该接口时,ios设备在某种情况下会中断该请求,导致TCP连接中server端无法向client端write数据。即在server端write之前连接已经close,write时出现异常。
由于只有h端出现,但h、b客户端代码一致,不太可能单独出现,故可能性较低。可能性二:
在第一次连接已经正常握手,并正常cl