V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
octopus
V2EX  ›  问与答

Java 项目 http 请求报 ClientAbortException 错误

  •  
  •   octopus · 2018-10-05 14:28:26 +08:00 · 6863 次点击
    这是一个创建于 2242 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    16 条回复    2018-10-16 22:01:10 +08:00
    fatttt
        1
    fatttt  
       2018-10-05 14:30:57 +08:00 via Android
    机器端口用完了吧?
    octopus
        2
    octopus  
    OP
       2018-10-05 14:31:05 +08:00
    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  
       2018-10-05 14:34:13 +08:00 via iPhone
    客户端超时中断链接了,服务端报这个,检查服务器负载,应用线程情况。检查代码数据库有没优化的地方,或者加钱升级配置,或者对接口做限流。
    octopus
        4
    octopus  
    OP
       2018-10-05 14:34:41 +08:00
    @fatttt 能详细说一下吗?不是很清楚
    abeholder
        5
    abeholder  
       2018-10-05 15:45:50 +08:00
    客户端下载中断也会报这个 ,其实没啥事 。。。
    zidian
        6
    zidian  
       2018-10-05 15:50:00 +08:00
    服务端有个比较耗时的处理还没完,客户端就把页面关了,然后服务端还往 response 写东西,就会报这个错
    我们之前是选择忽略掉
    octopus
        7
    octopus  
    OP
       2018-10-05 15:58:48 +08:00
    @zidian 我们这个涉及的是用户使用频率非常高的查询接口,没办法忽略
    octopus
        8
    octopus  
    OP
       2018-10-05 16:00:07 +08:00
    @abeholder 所有线上机器,同一个时间都在报这个错误
    zidian
        9
    zidian  
       2018-10-05 16:12:35 +08:00
    @octopus ajax 超时了也会报这个,把 timeout 调高点?
    octopus
        10
    octopus  
    OP
       2018-10-05 18:28:17 +08:00
    up
    octopus
        11
    octopus  
    OP
       2018-10-05 19:45:41 +08:00
    大家有什么建议吗
    charles2java
        12
    charles2java  
       2018-10-05 21:56:40 +08:00
    是不是网络不稳定的原因, 和之前碰到的 socketException 感觉类似
    irockytan
        13
    irockytan  
       2018-10-05 22:11:13 +08:00 via iPhone   ❤️ 1
    1、检查一下事发时候的流量日志,看看是不是有大量流量进来 2、检查数据库或者其他外部资源,看是否存在异常响应,比如资源争用 3、对系统进行压力测试,看看代码是否存在瓶颈,比如并发时频繁初始化重量级对象比如资源等待
    D3EP
        14
    D3EP  
       2018-10-06 01:55:25 +08:00 via iPhone
    看一下当时的接口监控,是不是耗时太长了。可能耗时太长,客户端主动关了 socket
    yidinghe
        15
    yidinghe  
       2018-10-06 07:13:49 +08:00 via Android   ❤️ 1
    @octopus 首先这个错误本身是没有办法处理的,忽略也不会有影响。其次应该找找背后的原因,比如防火墙、连接数、IO 情况等等,看看有什么异常的状态
    octopus
        16
    octopus  
    OP
       2018-10-16 22:01:10 +08:00
    定位了一下,初步结论应该是这个错误和这个接口本身没太大的关系;出问题时整个系统的接口响应都变慢了。查询后发现当时有一个线程池是用来给调用 http 链接第三方发送消息的,这个方法存在问题,导致短时间内占用内存过高,影响了整个服务。之前偶尔也出现类似的现象,也是由于这个方法有问题,导致当时的服务响应慢,之后线程被释放后,响应又恢复正常。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2975 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:39 · PVG 22:39 · LAX 06:39 · JFK 09:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.