为什么我的接口响应时间这么长?记一次接口响应时间过长问题排查

article/2025/10/13 14:06:50

一、情况描述

某saas应用,在请求一个接口的时候,发现响应时间非常的慢,利用前台google浏览器的F12调试,发现响应时间超过2秒

image-20210506161802547

二、问题排查

项目整体采用前后端分离,前端通过nginx实现负载转发,请求后端接口,所以首先排查是不是前台的问题,发生了某些很耗时的操作。

1. 查看nginx的响应时间

image-20210506162054245

通过查看nginx的日志信息,发现nginx对接口的响应时间,差不多也在2.4秒,排除了前台的问题

因为nginx的性能非常高,所以一般情况下,从nginx到后端,不太可能会耗时这么久

2. 查看后端接口代码

@ApiOperation(value = "获取用户状态", httpMethod = "GET")
@Log("获取用户状态")
@GetMapping("/getUserStatus")
public RetInfo getUserStatus(HttpServletRequest request) {log.info("===============获取用户状态 开始===============");long s = System.currentTimeMillis();RetInfo retInfo = RetInfoUtils.getRetInfoBySuccess();Map<String, String> loginMap = RequestUtils.getLoginMap(request);if(loginMap == null){return RetInfoUtils.getRetInfoByError(CommonConstant.BUS_EXCEPTION_RESULT,"用户未登录");}long start = System.currentTimeMillis();Map<String, String> userInfo = userInfoSrv.getUserInfo(loginMap.get("phone"));log.info("获取用户信息 耗时:" + (System.currentTimeMillis() - start));start = System.currentTimeMillis();if("1".equals(userInfo.get("is_enabled")) && StringUtils.isEmpty(loginMap.get("co_code"))){//如果审核通过  刷新sessionHttpSession session = request.getSession();session.setAttribute("open_session_userinfo", userInfo);session.setMaxInactiveInterval(time);}log.info("刷新session 耗时:" + (System.currentTimeMillis() - start));retInfo.setObject(userInfo.get("is_enabled"));retInfo.setResult(userInfo.get("feed_back"));log.info("===============获取用户状态 结束============耗时: " + (System.currentTimeMillis() - s));return retInfo;
}

后端代码其实也很简单,就是从session里面获取用户登录状态,通过打日志等一些方法,发现这个接口的实际执行时间,在4ms左右,完全达不到2.4s的时间,那么问题到底出在哪呢?

3. 分析aop注解

发现在接口加了一个自定义注解 @Log,这是我们自定义的注解,用于记录接口的调用日志

@Pointcut("@annotation(com.test.annotation.Log)")
public void pointcut() {
}@Around("pointcut()")
public Object around(ProceedingJoinPoint point) {Object result = null;long beginTime = System.currentTimeMillis();try {// 执行方法result = point.proceed();} catch (Throwable e) {log.error("方法执行错误::::{}", e.getMessage());}// 执行时长(毫秒)long time = System.currentTimeMillis() - beginTime;// 保存日志saveLog(point, time, result);return result;
}

这里的aop,我们使用的是同步的方法,只有在aop执行完,接口才会返回

经过日志排查,发现@Log日志入库的时间,耗时2秒多,问题出现在系统日志入库这一步,进一步排查数据库问题

4. 排查数据库问题

mysql自带的库information schema中有张表processlist,可以查看所有的进程

通过查看这张表的数据,发现有一个进程一直在定时执行,经过和同事的咨询沟通,有人写了个定时任务,定时入库数据,占用了数据库资源

最后联系了负责paas资源相关的负责人,对数据库进行了相应的优化,解决了问题


http://chatgpt.dhexx.cn/article/ZgHMj2fm.shtml

相关文章

计算机网络(六):链路层

文章目录 1. 概述2. 差错检测和纠正技术3. 多路访问链路和协议3.1 信道划分协议3.2 随机接入协议3.2.1 ALOHA协议3.2.2 CSMA 3.3 轮流协议 4. 交换局域网4.1 MAC地址4.2 以太网4.2.1 以太网帧结构 4.3 链路层交换机4.3.1 交换机转发和过滤4.3.2 链路层交换机的性质 5. 无线网络…

网络层、链路层理解

1.网络层和链路层关系 2.网络层 路由器 其实计算机本身就有路由器的功能&#xff0c;路由器可以理解成专用的特化简化型计算机&#xff0c;因此数据包的第一次转发发生在计算机本身。这也是为什么在不用路由器&#xff0c;纯交换机组局域网的时候&#xff0c;IP地址也会被需…

链路层协议——以太网协议

以太网协议 一、以太网帧格式二、ARP协议2.1 协议格式2.2 作用2.3 工作流程2.4 ARP局域网欺骗攻击 三、MTU对于上层协议的影响3.1 TCP协议的影响3.2 UDP协议的影响 链路层协议主要是负责相邻设备之间的数据传输。 一、以太网帧格式 max地址&#xff1a;网卡设备的物理硬件地址&…

链路层交换机及和路由器的比较

文章目录 前言一、交换机转发和过滤二、帧来到交换机可能发生的情况三、自学习三、链路交换机的性质四、交换机和路由器比较 前言 交换机的任务是接收入链路层帧并将它们转发到出链路;交换机自身对子网中的主机和路由器是透明的;这就是说&#xff0c;某主机/路由器向另一个主机…

链路层、网络层、传输层、应用层长度

1、概述 首先要看TCP/IP协议&#xff0c;涉及到四层&#xff1a;链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;应用层。      以太网&#xff08;Ethernet&#xff09;的数据帧在链路层      IP包在网络层      TCP或UDP包在传输层      TCP或UDP中…

计算机网络原理 - 网络层、链路层总结笔记

计算机网络原理 - 网络层、链路层 ##4.网络层 网络层主要是利用IP上的传输&#xff0c;在路由器中最高达到的层次为网络层&#xff0c;分组交换机只到链路层&#xff1b;IP准确来说不是一个主机的地址&#xff0c;而是一个接口的地址。 4.1 概述 网络层的作用&#xff1a;将分…

【计算机网络】链路层

链路层和局域网 1、链路层概述1.1链路层提供的服务1.2链路层在何处实现 2、差错检测和纠正技术2.1奇偶校验2.2检验和方法2.3循环冗余检测 3、多路访问链路和协议3.1信道划分协议3.2随机接入协议3.2.1时隙ALOHA3.2.2ALOHA3.2.3载波侦听多路访问CSMA3.2.4具有碰撞检测的载波侦听多…

BLE 链路层(LL)的数据结构

一 链路层的数据结构 在链路层上传输的数据格式如下图所示: 广播报文和数据报文都包含 Preamble(前导码)&#xff0c; AccessAddress(接入地址)&#xff0c;PDU(数据)&#xff0c;CRC。其中Constant Tone Extension是可选的。 前导码接入地址PDU HeaderLengthpayloadMIC(可选…

计算机网络自顶向下-链路层

链路层和局域网 两台主机之间&#xff0c;数据报跨越一系列通信链路传输&#xff0c;一些是有线链路一些是无线链路&#xff0c;从源主机起&#xff0c;通过一些了分组交换机在目的主机结束。在链路层中有两种不同的链路层信道&#xff0c; 第一种是广播信道&#xff0c;这种信…

链路层信道详解

文章目录 一、链路层概述链路层提供的服务链路层在何处实现 二、差错检验和纠正技术奇偶校验检验和方法循环冗余检测 三、多路访问协议信道划分协议时分多路复用&#xff08;TDM&#xff09;&#xff1a;频分多路复用&#xff08;FDM&#xff09;&#xff1a;码分多址&#xff…

计算机网络-链路层

一、概述 1.相关概念 节点&#xff1a;运行链路层协议的任何设备。链路&#xff1a;沿着通信路径连接相邻几诶单的通信信道。 2.提供的服务 2.1 成帧 几乎所有的链路层协议都要将数据报用链路层帧封装起来。一个帧由一个数据字段和若干首部字段组成&#xff0c;其中网络层…

链路层协议

文章目录 1. 链路层协议1.1 链路层协议与IP协议 2. 以太网帧与IP数据包2.1 以太网帧2.1.1 实用地位2.1.2 以太网帧格式 2.2 串行接口链路层协议 S L I P2.2.1 实用地位2.2.2 链路帧格式 2.3 串行接口链路层协议 P P P2.3.1 实用地位2.3.2 PPP 帧格式 2.4 环回接口2.4.1 环回定义…

链路层---->MAC地址,链路层与网络层对比

链路层 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> . 链路层和网络层…

链路层数据帧格式总结

创作人QQ&#xff1a;851301776&#xff0c;邮箱&#xff1a;lfr890207163.com&#xff0c;欢迎大家一起技术交流&#xff0c;本博客主要是自己学习的心得体会,只为每天进步一点点&#xff01; 个人座右铭&#xff1a; 1.没有横空出世&#xff0c;只要厚积一定发。 2.你可以学…

蓝牙相关学习:4.3.BLE协议链路层

BLE协议链路层 一、链路层二、信道分类跳频&#xff08;Hopping&#xff09; 三、状态机状态机的五种状态主还是从一对多 四、空口协议&#xff08;Air Interface Protocol&#xff09;空口包&#xff08;Air Interface Packet&#xff09;以白名单&#xff08;White List&…

数据链路层简介

文章目录 一、基本概念二、主要功能1.封装成帧2.透明传输3. 差错控制4. 流量控制5. 链路管理认识MTU 三、相关协议1. PPP协议2. ARP协议 一、基本概念 链路(Link)&#xff1a;一个节点到另一个相邻节点的一段物理线路&#xff0c;中间没有任何其他节点。链路由传输介质和物理设…

计算机网络 —— 链路层详解

文章目录 一&#xff0c;数据链路层基本概念1. 为什么要设置数据链路层2. 数据链路的主要功能1&#xff09;链路管理2&#xff09;帧同步3&#xff09;流量控制4&#xff09;差错控制5&#xff09;透明传输6&#xff09;寻址 3. 链路层的三个基本问题1&#xff09;封装成帧2&am…

计算机网络---数据链路层

&#xff08;一&#xff09;基本概念 数据链路层是OSI参考模型中的第二层&#xff0c;介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务&#xff0c;其最基本的服务是将源自物理层来的数据可靠地传输到相邻节点的目标机网络层。 换言之&#x…

计算机网络之链路层

两台主机之间&#xff0c;数据报跨越一系列通信链路传输&#xff0c;一些是有线链路一些是无线链路&#xff0c;从源主机起&#xff0c;通过一些了分组交换机在目的主机结束。在链路层中有两种不同的链路层信道&#xff0c; 第一种是广播信道&#xff0c;这种信道用于有线局域…

tcp粘包 java_详说tcp粘包和半包

tcp服务端和客户端建立连接后会长时间维持这个连接&#xff0c;用于互相传递数据&#xff0c;tcp是以流的方式传输数据的&#xff0c;就像一个水管里的水一样&#xff0c;从一头不断的流向另一头。 理想情况下&#xff0c;发送的数据包都是独立的&#xff0c; 现实要复杂一些&a…