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


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

    背景

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

    请求出现异常,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 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    这里可以看到org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe断开了连接,

    认识broken pipe

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

    可能原因

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

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

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

    Skywalking分析

    在这里插入图片描述

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

    在这里插入图片描述

    优化步骤

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

    在这里插入图片描述

    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
    
    • 1

    JAVA_OPTS=" -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=yfb-9101 -server -Djava.security.egd=file:/dev/./urandom -Xmx1500m -Xms512m -Xss256k -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=512m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 "

    -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=yfb-9102 -server

  • 相关阅读:
    利用大型语言模型轻松打造浪漫时刻
    论文笔记--Llama3 report
    如何用Python快速生成SQL语句?
    嵌入式Linux(树莓派)环境设置和交叉编译
    JS-运算符和表达式\函数、程序的流程结构
    未在本地计算机上注册“Microsoft .ACE. OLEDB .12.0”提供程序
    基于matlab的排队系统仿真
    JVM - 内存模型
    Python超好用的命令行界面实现工具,我保证你肯定不知道...
    京东运营数据分析:2023年中秋大闸蟹市场销售数据分析
  • 原文地址:https://blog.csdn.net/weixin_39051835/article/details/133753304