Broken pipe异常分析及解决

Posted 幽灵雾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Broken pipe异常分析及解决相关的知识,希望对你有一定的参考价值。

Broken pipe异常分析报告

1.错误描述

ClientAbortException: java.io.IOException: Broken pipe

可能出现原因:

TCP服务端write数据时,收到SIGPIPE信号(连接已经终止)

场景:

  1. TCP握手尚未结束时,连接已经close;
  2. 服务端收到一次read,但write了多次;
  3. 连接通道被占满,新连接被拒绝时,client中断了所有连接。

2.分析过程

2.1.初步排查

每次出现该异常时,总是伴随/im/getUsercInfos.json接口的调用。

2.1.1具体现象
  • 异常记录时间=接口请求记录时间(server连接write前记录)-(2至10)ms;
  • 总是ios设备爆出;
  • 总是h端爆出。
2.1.2分析
  1. 可能性一:
    在请求该接口时,ios设备在某种情况下会中断该请求,导致TCP连接中server端无法向client端write数据。即在server端write之前连接已经close,write时出现异常。
    由于只有h端出现,但h、b客户端代码一致,不太可能单独出现,故可能性较低。

  2. 可能性

以上是关于Broken pipe异常分析及解决的主要内容,如果未能解决你的问题,请参考以下文章

TCP连接异常:broken pipe 和EOF

golang服务报错: write: broken pipe

使用 Ktor HttpClient(CIO) websocket 发送内容时如何捕获 Broken pipe 异常?

java.sql.SQLException: Io 异常: Broken pipe 如何在不重启的情况下恢复?

深入TCP协议底层解读Broken pipe产生的根因

java.io.IOException: Broken pipe