最近在公司负责的一个项目,总是在高峰期某几个接口报 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 写东西,就会报这个错
我们之前是选择忽略掉 |
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
1、检查一下事发时候的流量日志,看看是不是有大量流量进来 2、检查数据库或者其他外部资源,看是否存在异常响应,比如资源争用 3、对系统进行压力测试,看看代码是否存在瓶颈,比如并发时频繁初始化重量级对象比如资源等待
|
14
D3EP 2018-10-06 01:55:25 +08:00 via iPhone
看一下当时的接口监控,是不是耗时太长了。可能耗时太长,客户端主动关了 socket
|
15
yidinghe 2018-10-06 07:13:49 +08:00 via Android 1
@octopus 首先这个错误本身是没有办法处理的,忽略也不会有影响。其次应该找找背后的原因,比如防火墙、连接数、IO 情况等等,看看有什么异常的状态
|
16
octopus OP 定位了一下,初步结论应该是这个错误和这个接口本身没太大的关系;出问题时整个系统的接口响应都变慢了。查询后发现当时有一个线程池是用来给调用 http 链接第三方发送消息的,这个方法存在问题,导致短时间内占用内存过高,影响了整个服务。之前偶尔也出现类似的现象,也是由于这个方法有问题,导致当时的服务响应慢,之后线程被释放后,响应又恢复正常。
|