Java后端--接口响应慢的排查方法及解决方案
2022/2/1 20:39:31
本文主要是介绍Java后端--接口响应慢的排查方法及解决方案,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原文网址:Java后端--接口响应慢的排查方法及解决方案_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍Java后端接口响应慢的排查的方法以及如何解决。
如何发现接口响应慢了?
一般通过如下方式发现接口响应慢
- 用户反馈
- 监控系统的报警(例如:SkyWalking)
排查方向
后端接口响应慢分以下2种情况:
- 个别接口响应慢
- 所有接口响应慢
对于第2种情况,很可能是服务器问题,需要排查网络、CPU使用率、内存使用率、磁盘使用率等。见:Java--线上问题排查--方法/步骤_IT利刃出鞘的博客-CSDN博客
本文只探讨第1种情况:排查个别接口响应慢的方法。
定位问题的方法
法1:链路追踪工具(推荐)
推荐使用SkyWalking。它会展示出每一个与网络有关的耗时,比如:读写数据库、读写Redis、SpringCloud调用、Dubbo调用等。这样就能立马定位是哪次操作耗时了。
同时,SkyWalking可以记录每一个SQL语句,可以帮助定位。
例如:(如箭头所指处,最上边一个是总耗时,下边的线段是单个操作的耗时)
法2:看代码猜问题点
如果没有链路追踪工具,只能猜测是哪个地方出问题了,到代码中去追踪。
猜测方向:响应慢很大可能是操作数据库耗时比较长。
法3:在链路上打印日志(最不推荐)
在相应的链路上打印日志,然后查看日志,看是哪个地方耗时。
解决方案
数据库耗时长
- 必要字段加索引
- 确定是否索引失效了
- 如果有回表查询,尽量优化为覆盖索引
相关网址:
SQL/MySQL--索引的优点/缺点/创建索引的原则_IT利刃出鞘的博客-CSDN博客
SQL/MySQL--索引失效--原因/解决方案_IT利刃出鞘的博客-CSDN博客
架构不合理
目前很多项目都是微服务了,在拆分微服务时就必须要注意:
- 关联性很强的服务,尽量将它们放到同一个微服务。
- 比如:订单微服务和库存微服务。
- 每次访问都要用到的功能,尽量不要作为一个服务,这样每次都要有网络损耗
- 比如:验证用户的token是否有效。
- 这个功能基本每个接口都会用到,最好是将其写到公共代码中,直接作为依赖进行打包。
- 用户其他的功能,比如:注册、登录、用户管理等,可以单独写一个微服务。
- 比如:验证用户的token是否有效。
业务逻辑
这个就要具体情况具体分析了。
可以从如下两个方面解决:
- 写代码要思路清晰,尽量复杂问题简单化,同时考虑效率问题。
- 加强代码评审。代码评审要来真格的,我去过的大厂是这么搞的,很有借鉴意义:
- 搞一个代码评审平台(类似jira等),让所有人都可以参与到评审
- 将评审的别人的bug数和自己的bug数作为一项绩效考核,但占比尽量小一些
java死锁
简介
有三种方法可排查死锁:jps+jstack、jconsole、jvisualvm
法1:jps+jstack
法2:jconsole
法3:jvisualvm
其他网址
线程中死锁的排查_moxiaolin的博客-CSDN博客
Java死锁排查和Java CPU 100% 排查的步骤整理-CSDN博客_java oom排查
面试官:如何快速排查死锁?如何避免死锁?
数据库死锁
一般通过可视化页面查看。比如:druid的页面。
这篇关于Java后端--接口响应慢的排查方法及解决方案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南