Java线上问题排查系列--后端接口响应慢的排查方法及解决方案

白色玫瑰 程序猿

时间: 2023-05-22 阅读: 1 字数:3980

{}
本文介绍Java后端接口响应慢的排查的方法以及如何解决。

目录

原文网址:<a href="https://knife.blog.csdn.net/article/details/122687089" title="Java线上问题排查系列--后端接口响应慢的排查方法及解决方案_IT利刃出鞘的博客-CSDN博客">Java线上问题排查系列--后端接口响应慢的排查方法及解决方案_IT利刃出鞘的博客-CSDN博客</a>

简介

说明

本文介绍Java后端接口响应慢的排查的方法以及如何解决。

如何发现接口响应慢了?

一般通过如下方式发现接口响应慢

用户反馈 监控系统的报警(例如:<a class="link-info" href="https://knife.blog.csdn.net/article/details/120191083" title="SkyWalking">SkyWalking</a>)

排查方向

后端接口响应慢分以下2种情况:

个别接口响应慢

本文只探讨这情况:排查个别接口响应慢的方法。 所有接口响应慢

可能是服务器问题,需要排查网络、CPU使用率、内存使用率、磁盘使用率等。见:<a href="https://knife.blog.csdn.net/article/details/121044875" title="Java--线上问题排查--方法/步骤_IT利刃出鞘的博客-CSDN博客">Java--线上问题排查--方法/步骤_IT利刃出鞘的博客-CSDN博客</a>

技术资料与交流 ==> ►分享靠谱资料:Java真实面试题汇总、精选简历模板、PDF书籍(高清带书签)、精选PPT模板等; ►分享Java实用技术;►帮助优化简历。详见:<a href="https://app.yinxiang.com/fx/d2ac6ff4-94c5-4e5f-9d4f-f5dfc344ede6" title="资料与交流">资料与交流</a>

定位问题的方法

法1:链路追踪工具(推荐)

  推荐使用<a class="link-info" href="https://knife.blog.csdn.net/article/details/120191083" title="SkyWalking">SkyWalking</a>。它会展示出每一个与网络有关的耗时,比如:读写数据库、读写Redis、SpringCloud调用、Dubbo调用等。这样就能立马定位是哪次操作耗时了。


  同时,SkyWalking可以记录每一个SQL语句,可以帮助定位。

例如:(如箭头所指处,最上边一个是总耗时,下边的线段是单个操作的耗时)

法2:看代码猜问题点

  如果没有链路追踪工具,只能猜测是哪个地方出问题了,到代码中去追踪。


  猜测方向:响应慢很大可能是操作数据库耗时比较长。

法3:在链路上打印日志(最不推荐)

在相应的链路上打印日志,然后查看日志,看是哪个地方耗时。

解决方案

数据库耗时长

必要字段加索引 确定是否索引失效了 如果有回表查询,尽量优化为覆盖索引

相关网址:

<a href="https://knife.blog.csdn.net/article/details/120520636" title="SQL/MySQL--索引的优点/缺点/创建索引的原则_IT利刃出鞘的博客-CSDN博客">SQL/MySQL--索引的优点/缺点/创建索引的原则_IT利刃出鞘的博客-CSDN博客</a>

<a href="https://knife.blog.csdn.net/article/details/121239921" title="SQL/MySQL--索引失效--原因/解决方案_IT利刃出鞘的博客-CSDN博客">SQL/MySQL--索引失效--原因/解决方案_IT利刃出鞘的博客-CSDN博客</a>

架构不合理

目前很多项目都是微服务了,在拆分微服务时就必须要注意:

关联性很强的服务,尽量将它们放到同一个微服务。

比如:订单微服务和库存微服务。 每次访问都要用到的功能,尽量不要作为一个服务,这样每次都要有网络损耗

比如:验证用户的token是否有效。

 这个功能基本每个接口都会用到,最好是将其写到公共代码中,直接作为依赖进行打包。     用户其他的功能,比如:注册、登录、用户管理等,可以单独写一个微服务。        

业务逻辑

这个就要具体情况具体分析了。

可以从如下两个方面解决:

写代码要思路清晰,尽量复杂问题简单化,同时考虑效率问题。 加强代码评审。代码评审要来真格的,我去过的大厂是这么搞的,很有借鉴意义:

搞一个代码评审平台(类似jira等),让所有人都可以参与到评审 将评审的别人的bug数和自己的bug数作为一项绩效考核,但占比尽量小一些

java死锁

简介

有三种方法可排查死锁:jps+jstack、jconsole、jvisualvm

法1:jps+jstack

法2:jconsole

法3:jvisualvm

其他网址

数据库死锁

一般通过可视化页面查看。比如:druid的页面。

原文地址:https://blog.csdn.net/feiying0canglang/article/details/122687089?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168474998616800188596623%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168474998616800188596623&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-122687089-null-null.142^v87^control_2,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/13290e0de9244ca8849271da6f501b0c
最新评论
当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号

×

(穷逼博主)在线接单

QQ: 1164453243

邮箱: abcdsjx@126.com

前端项目代做
前后端分离
Python 爬虫脚本
Java 后台开发
各种脚本编写
服务器搭建
个人博客搭建
Web 应用开发
Chrome 插件编写
Bug 修复