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


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

    背景

    测试说搜索接口查询搜索 “苏州协同创新智能科技时”,报红超时,去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

  • 相关阅读:
    微信小程序(非个人)备案指南
    ESP32-01 Hello World
    EasyWeChat调用企业微信接口获取客户群数据
    preload和prefetch、dns-prefetch和preconnect
    Java教程:如何使用Jib插件容器化SpringBoot应用?
    【Tent-SSA-BP】基于Tent混沌映射改进的麻雀算法优化BP神经网络回归预测研究(Matlab代码实现)
    Linux 之 Ubuntu 代码开发工具 Visual Studio Code(VSCode) 的安装与一些常用插件配置的简单整理
    Element U I的 el-date-picker做时间限制
    阿里旗下语雀宕机近10小时 企业关键业务如何避免被“云”拖累
    Codeforces Round 753 (Div. 3)(集训队加训2)
  • 原文地址:https://blog.csdn.net/weixin_39051835/article/details/133753304