接口访问速度突然变慢,怎么排查

现在大多数的业务都微服务化了,可能一个请求需要调用好几个甚至几十个ms才能拿到最终的结果,但是如果一旦中间某个servcie出现了问题,影响的将会是整条调用链路,就比如某个ms突然变的很慢,那么整个请求也会跟着一起变慢,怎么排查这个问题,然后怎么解决?

首先,使用现有的链路追踪器(比如现在比较流行的zipkin)查看在整个调用链路中,是哪个接口耗时时间过长,那么可能的原因有以下几点:

  1. 是否线程池配置的参数有问题,比如核心线程数,或者最大线程数是否合理

  2. 还是线程池,是否有多个业务共用一个线程池的场景,建议在资源允许的情况下,每个业务场景配置自己的线程池,一个是比较灵活,可以根据实际业务场景配置线程池的参数,防止配置过少或过多;二是防止某个业务场景访问量突然升高导致线程池阻塞影响其他业务的访问

  3. 是否有线程死锁

  4. 是否有大对象的频繁的深拷贝,比如for循环里对大对象深拷贝,会影响性能,还有就是有一些大对象的创建,可能会引起频繁的full GC

  5. 是否有频繁的hashmap扩容,或者其他集合类的频繁扩容

  6. 是否有使用本地缓存,比如caffeine等,当然没有使用本地缓存导致变慢可能不是当前接口的问题,有可能是下游接口变慢,但是如果当前接口使用了本地缓存,也可以不用直接调用下游接口,就可以减少一次调用提升性能

  7. 是否正确配置了数据库连接池的大小

  8. 接口是否有使用缓存,比如redis缓存

  9. 机器的cpu和内存是否打爆了

  10. 请求是否被合理的分发,比如之前使用的负载均衡模式是权重的模式,分配的依据是网络速度,但是现在这个权重大的机器网络速度突然变慢,但是大量的请求又都到这个机器上

  11. 类似11点,检查网络速度

  12. sql是否使用到了索引,或者是否正确的使用了索引

  13. 在使用锁或者synchronized的时候,是否同步的力度太大

  14. 是否有内存泄漏或者内存溢出导致频繁的full GC

  15. tomcat连接数配置是否合理

相关推荐
l1t17 小时前
DeepSeek总结的DuckLake构建基于 SQL 原生表格式的下一代数据湖仓
数据库·sql
KmSH8umpK17 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第八篇
数据库·redis·分布式
TDengine (老段)17 小时前
从施工监测到运营预警,桥科院用 TDengine 提升桥梁数据管理能力
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
S1998_1997111609•X18 小时前
论mysql国盾shell-sfa犯罪行为集团下的分项工程及反向注入原理尐深度纳米算法下的鐌檵鄐鉎行为
网络·数据库·网络协议·百度·开闭原则
KmSH8umpK19 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第七篇
数据库·redis·分布式
BU摆烂会噶20 小时前
【LangGraph】持久化实现的三大能力——时间旅行
数据库·人工智能·python·postgresql·langchain
l1t21 小时前
DeepSeek总结的DuckLake 入门
数据库
Joseph Cooper21 小时前
RAG 与 AI Agent:智能体真的需要检索增强生成吗?
数据库·人工智能·ai·agent·rag·上下文工程
light blue bird21 小时前
主子端台二分法任务汇总组件
前端·数据库·.net·桌面端winform
DevilSeagull1 天前
MySQL(2) 客户端工具和建库
开发语言·数据库·后端·mysql·服务