
最近在公司负责的一个项目,总是在高峰期某几个接口报 org.apache.catalina.connector.ClientAbortException 错误。刚开始的时候是一两台机器,报几分钟,之后会自行消失,后来比较频繁,今天早上线上机器都出现了这个错误,这个可能是什么原因导致的问题呢?
1 fatttt 2018-10-05 14:30:57 +08:00 via Android 机器端口用完了吧? |
2 octopus OP 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) ...... 错误堆栈信息如上 |
3 hpeng 2018-10-05 14:34:13 +08:00 via iPhone 客户端超时中断链接了,服务端报这个,检查服务器负载,应用线程情况。检查代码数据库有没优化的地方,或者加钱升级配置,或者对接口做限流。 |
5 abeholder 2018-10-05 15:45:50 +08:00 客户端下载中断也会报这个 ,其实没啥事 。。。 |
6 zidian 2018-10-05 15:50:00 +08:00 服务端有个比较耗时的处理还没完,客户端就把页面关了,然后服务端还往 response 写东西,就会报这个错 我们之前是选择忽略掉 |
7 octopus OP @zidian 我们这个涉及的是用户使用频率非常高的查询接口,没办法忽略 |
10 octopus OP up |
11 octopus OP 大家有什么建议吗 |
12 charles2java 2018-10-05 21:56:40 +08:00 是不是网络不稳定的原因, 和之前碰到的 socketException 感觉类似 |
13 irockytan 2018-10-05 22:11:13 +08:00 via iPhone 1、检查一下事发时候的流量日志,看看是不是有大量流量进来 2、检查数据库或者其他外部资源,看是否存在异常响应,比如资源争用 3、对系统进行压力测试,看看代码是否存在瓶颈,比如并发时频繁初始化重量级对象比如资源等待 |
看一下当时的接口监控,是不是耗时太长了。可能耗时太长,客户端主动关了 socket |
15 yidinghe 2018-10-06 07:13:49 +08:00 via Android @octopus 首先这个错误本身是没有办法处理的,忽略也不会有影响。其次应该找找背后的原因,比如防火墙、连接数、IO 情况等等,看看有什么异常的状态 |
16 octopus OP 定位了一下,初步结论应该是这个错误和这个接口本身没太大的关系;出问题时整个系统的接口响应都变慢了。查询后发现当时有一个线程池是用来给调用 http 链接第三方发送消息的,这个方法存在问题,导致短时间内占用内存过高,影响了整个服务。之前偶尔也出现类似的现象,也是由于这个方法有问题,导致当时的服务响应慢,之后线程被释放后,响应又恢复正常。 |