接口响应太慢的原因排查

首先判断是否是所有的API接口相应都很慢,还是某个特定的接口相应速度慢,如果所有接口的相应速度都很慢,可能是服务器资源、数据库或者网络流量的问题。 如果只是一个接口比较慢或者某个用户的请求中比较慢 ,那么可能就是业务逻辑或者 SQL 的问题,比如某个sql 索引失效了,进行的是全表的扫描,这个时候我们就需要去进行sql的调优。

1网络层故障的排查

1.我们先用一下ping命令检查一下服务器的连通性以及往返时间。

  • 延迟:查看平均 RTT 是否在可接受范围内(通常低于 100ms)。
  • 丢包率:查看是否存在数据包丢失,丢包率高会显著影响性能。

2. 查看服务器的资源使用

服务器 CPU 用满了

通过 top 命令查看服务器内存和资源的使用。 %CPU 是 cpu 的使用情况,MEM 是内存的使用情况。 比如有一个服务的 CPU 飙到了 90 多,可能是出现了死锁,或者无限循环了。

alt

如果是 docker 部署的项目,可以用 docker stats 查看 docker 容器占用的内存。

alt

来找到 CPU 占用高的进程,再找到对应的线程。 使用 jstack 查看线程的堆栈信息,这个是 JVM 提供的查看线程信息的工具。可以看到 JVM 的堆栈信息,找到出现问题的具体代码,然后再进行修改。

连接池资源耗尽

可能是 tomcat 的连接池或者是数据库的连接池耗尽,调整业务的线程池参数。

spring:
  datasource:
    hikari:
      maximum-pool-size: 50
      minimum-idle: 10
      connection-timeout: 30000
      idle-timeout: 600000
在配置连接池的时候需要合理设置连接池的大小。多个请求过来数据库的连接池用完了

具体业务代码的排查

查找 慢 sql

针对于具体的接口 ,sql 执行过慢的情况,使用 explain 进行慢 sql 的分析,看 sql 是否走了索引。很多情况下都是索引失效。

这边就可以往 sql 调优去聊了

  1. 对于大量的数据查询一定要使用分页查询来限制每次返回的行数。

2.建立联合索引来提高效率等。

  1. 使用 explain 分析 sql 查询的执行计划,判断查询是否使用了索引。

从JVM 内存、GC,线程等信息进行考虑


Java 应用程序运行在 JVM 之上,JVM 的性能直接影响 API 接口的响应速度。常见的 JVM 优化策略包括

调整堆内存大小:根据应用的内存需求,合理设置 JVM 的堆内存大小,避免频繁的 GC 操作。

-Xms4g -Xmx4g

使用 G1 GC 垃圾回收器:对于高并发应用,G1 GC 可以减少 Full GC 的停顿时间,提高系统的响应速度。

-XX:+UseG1GC

监控 GC 日志:通过分析 GC 日志,判断是否存在频繁 GC 或长时间停顿的问题。

-XX:+PrintGCDetails -Xloggc:gc.log

设置缓存

如果有些接口在 管理系统下面响应时间比较长,可以将数据缓存起来到 Redis 中,下次查询的时候直接从 Redis 中拿即刻。

系统调用第三方的服务

为第三方的服务设置对应的超时时间,比如三秒钟,如果三秒钟没有响应直接返回,避免长时间的等待。 比如调用阿里的大模型 API,如果存在延迟,三秒钟会有收到 result 直接给用户返回一个空的信息。

对于某些不需要立即返回的第三方服务调用,可以使用异步调用提高系统的响应速度。

熔断和降级

采用微服务的熔断和降级,当第三方服务出现问题时,能够快速返回默认结果,保证系统的稳定性。

#机械人面试中的常问题##接口响应太慢的原因排查#
牛牛的面试专栏 文章被收录于专栏

牛牛的面试专栏,希望自己在25年可以拿到一份大厂的SP Offer 你的点赞和收藏都是我持续更新的动力

全部评论
mark
点赞 回复 分享
发布于 04-12 00:49 陕西
mark一下大佬经验
点赞 回复 分享
发布于 04-11 20:46 山东
mark一下大佬经验
点赞 回复 分享
发布于 04-09 00:42 安徽
mark一下大佬经验
点赞 回复 分享
发布于 04-08 09:58 北京
mark
点赞 回复 分享
发布于 04-07 15:25 河南
m
点赞 回复 分享
发布于 04-07 12:36 河北
感觉写得很详细了
点赞 回复 分享
发布于 04-07 09:41 辽宁
mark一下大佬经验
点赞 回复 分享
发布于 04-07 09:12 安徽
mark一下大佬经验
点赞 回复 分享
发布于 04-07 08:47 安徽
mark一下大佬经验
点赞 回复 分享
发布于 04-06 22:04 广东
mark一下大佬经验
点赞 回复 分享
发布于 04-06 21:27 广东
mark
点赞 回复 分享
发布于 03-25 08:07 安徽

相关推荐

点赞 评论 收藏
分享
11-19 09:45
已编辑
门头沟学院 Java
bg:2本9硕,第一段实习胆小🐭未投递bat整体timeline:10.9开始投递 除jdy外 10.23都已经结束美团(数据平台部)一面 二面 oc蚂蚁(Oceanbase某边缘部门)一面 二面拒绝(脑子进水了)快手(大模型应用开发)一面挂虾皮 (保险那边业务)一面 二面挂京东jdy(京东科技)一面 二面 三面 oc百度(用增后端)一面挂b站 (cicd流水线)一面挂滴滴 (mpt引擎架构)一面过 二面oc面试一些更具体部门或者业务,这里就不展开了,有感兴趣的同学可以私聊面经~一点感想:1.越来越卷了,认识了很多27届的小伙伴现在已经2-3段实习了2.大模型应用开发是趋势,在你学历以及简历深度到位的基础上,了解甚至熟悉大模型应用开发的东西会帮助你脱颖而出,最少能多很多面试(实测),但是也存在一个小风险:简历靠大模型吸引来的,可能一般也只是组里应上面okr要求要做agent,招你进去随便做一个,成长性堪忧,但是总比啥都不做好。3.自己做的项目,不管是点评还是什么其他各种秒杀 电商等,可以想办法多体现一些与众不同,面试官们真看腻了,他们都能给你全文背诵你简历的描述,最重要的在于项目复杂度,一定新颖程度描述到位的基础上,多结合个人的思考,没接触的场景或者问题,玩命调动自己做项目的过程经验以及结合一定八股来回答,在面试官那边印象不会差的4.算法这块,感觉绝大部分厂不会太为难,我手撕十多道的经验上来看,没有超出hot100及其简单变式,不用太担心5.最重要的还是运气,运气面前一切实力高低与否都显得很渺小而运气又和投递时期挂钩,短时间内如果没有面试或者面试结果不尽人意,不用着急,可以继续投递的同时一边优化简历和熟悉八股算法,没准哪天某大厂缺人就一面速通你了,幸福往往就在一瞬间~祝大家都能找到自己满意的实习~也欢迎同一届的后端小伙伴们一起多多交流
发面经攒人品
点赞 评论 收藏
分享
评论
49
244
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务