• 作者:老汪软件
  • 发表时间:2023-12-30 21:00
  • 浏览量:

搜索接口搜索“苏州协同创新智能科技时”超时调优 背景

测试说搜索接口查询搜索 “苏州协同创新智能科技时”,报红超时,去捞日志

请求出现异常,10940,异常信息:
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
	at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:356)
	at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:825)
	at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:730)
	at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:391)
	at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:369)
	at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96)
	at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
	at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:282)
	at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
	at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:135)
	at java.io.OutputStreamWriter.write(OutputStreamWriter.java:220)
	at java.io.Writer.write(Writer.java:157)
	at org.springframework.util.StreamUtils.copy(StreamUtils.java:118)
	at 

这里可以看到org....: java.io.: pipe断开了连接,

认识 pipe

pipe是管道的意思,管道里面是数据流,通常是从文件或网络套接字读取的数据。 当该管道从另一端突然关闭时,会发生数据突然中断,即是。 对于文件File来说,这可能是文件安装在已断开连接的光盘或远程网络上。 对于来说,可能是网络被拔出或另一端的进程崩溃。 在Java中,没有具体的。 将此类错误包含在另一个异常,例如java.io.: pipe

可能原因

1、客户端请求服务器数据,服务器突然挂了;

2、客户端请求服务端数据,服务端正常返回,凡是客户端由于超时等原因断开。

这里服务器是没有挂的,我们是第二种,也就是浏览器等不到后端处理的结果了,断开了。

分析

搜索接口搜索“苏州协同创新智能科技时”超时调优

1.搜索发现这个这里消耗了大量时间,因为这个搜索词搜出来的内容太多了,去代码定位如下图

搜索接口搜索“苏州协同创新智能科技时”超时调优

优化步骤

1.这个方法往下是查询两次mongo,点进第一个查询这里优化了一下,原来split拆分成数组,然后通过将数组转换成列表,又创建了一个新的

搜索接口搜索“苏州协同创新智能科技时”超时调优

2.接着就是外层循环改成多线程,一开始用的并行流,效果不大,并行流的核心数是cup数,用多线程自定义线程数为cup*3试了下效果快了3-4倍,接口时间从原来的21秒优化到现在的5-6秒

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar"; export CATALINA_OPTS

=" -:/usr/local/agent/-agent.jar -.agent.=yfb-9101 - -Djava..egd=file:/dev/./ - - - -XX:=64m -XX:=512m -XX:+ -XX:+ -XX:+bled -Djava.awt.=true -Dfile.=UTF-8 -Dsun.jnu.=UTF-8 "

-:/usr/local/agent/-agent.jar -.agent.=yfb-9102 -