Java 项目 http 请求报 ClientAbortException 错误

2018-10-05 14:28:26 +08:00
 octopus

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/495027

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX