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

现在大多数的业务都微服务化了,可能一个请求需要调用好几个甚至几十个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连接数配置是否合理

相关推荐
DolphinDB3 小时前
集成 Prometheus 与 DolphinDB 规则引擎,构建敏捷监控解决方案
数据库
IvorySQL4 小时前
PostgreSQL 技术日报 (3月10日)|IIoT 性能瓶颈与内核优化新讨论
数据库·postgresql·开源
DBA小马哥7 小时前
时序数据库是什么?能源行业国产化替换的入门必看
数据库·时序数据库
爱可生开源社区9 小时前
某马来西亚游戏公司如何从 SQL Server 迁移至 OceanBase?
数据库
小瓦码J码11 小时前
PostgreSQL表名超长踩坑记
数据库·postgresql
yhyyht11 小时前
InfluxDB入门记录(三)flux-dsl
数据库·后端
IvorySQL1 天前
PostgreSQL 技术日报 (3月9日)|EXPLAIN ANALYZE 计时优化与复制语法讨论
数据库·postgresql·开源
stark张宇1 天前
MySQL 核心内幕:从索引原理、字段选型到日志机制与外键约束,一篇打通数据库任督二脉
数据库·mysql·架构
倔强的石头_1 天前
融合数据库架构实践:关系型、JSON与全文检索的“一库多能”深度解析
数据库
星辰员1 天前
KingbaseES数据库:ksql 命令行用户与权限全攻略,从创建到删除
数据库