octopus
V2EX  ›  问与答

Java 项目 http 请求报 ClientAbortException 错误

  •  
  •   octopus · Oct 5, 2018 · 7632 views
    This topic created in 2802 days ago, the information mentioned may be changed or developed.

    最近在公司负责的一个项目,总是在高峰期某几个接口报 org.apache.catalina.connector.ClientAbortException 错误。刚开始的时候是一两台机器,报几分钟,之后会自行消失,后来比较频繁,今天早上线上机器都出现了这个错误,这个可能是什么原因导致的问题呢?

    16 replies    2018-10-16 22:01:10 +08:00
    fatttt
        1
    fatttt  
       Oct 5, 2018 via Android
    机器端口用完了吧?
    octopus
        2
    octopus  
    OP
       Oct 5, 2018
    org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
    at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:370)
    at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:334)
    at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:101)
    at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1048)
    at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:953)
    ......
    错误堆栈信息如上
    hpeng
        3
    hpeng  
       Oct 5, 2018 via iPhone
    客户端超时中断链接了,服务端报这个,检查服务器负载,应用线程情况。检查代码数据库有没优化的地方,或者加钱升级配置,或者对接口做限流。
    octopus
        4
    octopus  
    OP
       Oct 5, 2018
    @fatttt 能详细说一下吗?不是很清楚
    abeholder
        5
    abeholder  
       Oct 5, 2018
    客户端下载中断也会报这个 ,其实没啥事 。。。
    zidian
        6
    zidian  
       Oct 5, 2018
    服务端有个比较耗时的处理还没完,客户端就把页面关了,然后服务端还往 response 写东西,就会报这个错
    我们之前是选择忽略掉
    octopus
        7
    octopus  
    OP
       Oct 5, 2018
    @zidian 我们这个涉及的是用户使用频率非常高的查询接口,没办法忽略
    octopus
        8
    octopus  
    OP
       Oct 5, 2018
    @abeholder 所有线上机器,同一个时间都在报这个错误
    zidian
        9
    zidian  
       Oct 5, 2018
    @octopus ajax 超时了也会报这个,把 timeout 调高点?
    octopus
        10
    octopus  
    OP
       Oct 5, 2018
    up
    octopus
        11
    octopus  
    OP
       Oct 5, 2018
    大家有什么建议吗
    charles2java
        12
    charles2java  
       Oct 5, 2018
    是不是网络不稳定的原因, 和之前碰到的 socketException 感觉类似
    irockytan
        13
    irockytan  
       Oct 5, 2018 via iPhone   ❤️ 1
    1、检查一下事发时候的流量日志,看看是不是有大量流量进来 2、检查数据库或者其他外部资源,看是否存在异常响应,比如资源争用 3、对系统进行压力测试,看看代码是否存在瓶颈,比如并发时频繁初始化重量级对象比如资源等待
    D3EP
        14
    D3EP  
       Oct 6, 2018 via iPhone
    看一下当时的接口监控,是不是耗时太长了。可能耗时太长,客户端主动关了 socket
    yidinghe
        15
    yidinghe  
       Oct 6, 2018 via Android   ❤️ 1
    @octopus 首先这个错误本身是没有办法处理的,忽略也不会有影响。其次应该找找背后的原因,比如防火墙、连接数、IO 情况等等,看看有什么异常的状态
    octopus
        16
    octopus  
    OP
       Oct 16, 2018
    定位了一下,初步结论应该是这个错误和这个接口本身没太大的关系;出问题时整个系统的接口响应都变慢了。查询后发现当时有一个线程池是用来给调用 http 链接第三方发送消息的,这个方法存在问题,导致短时间内占用内存过高,影响了整个服务。之前偶尔也出现类似的现象,也是由于这个方法有问题,导致当时的服务响应慢,之后线程被释放后,响应又恢复正常。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1198 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 23:45 · PVG 07:45 · LAX 16:45 · JFK 19:45
    ♥ Do have faith in what you're doing.