当前位置: 首页 > news >正文

03)阿里 Arthas(阿尔萨斯)开源的 Java 诊断工具使用-排查web项目请求后响应超时或响应慢;trace、stack、profiler指令使用

阿里 Arthas(阿尔萨斯)开源的 Java 诊断工具使用-排查web项目请求后响应超时或响应慢、controller到service到dao层执行慢的方法、代码排查

当一个HTTP接口执行特别慢,且涉及Controller -> Service -> DAO 多层调用和SQL执行时,使用 Arthas(阿里巴巴开源的Java诊断工具)可以非常高效地定位性能瓶颈。以下是系统性的排查步骤,帮助你精准定位到“哪个方法的哪一段代码最慢”。

总体思路

  1. 定位慢请求的调用链路耗时分布(哪个方法耗时最长)
  2. 深入分析耗时方法内部的子方法或代码段(如SQL执行、循环、远程调用等)
  3. 重点分析SQL执行时间(DAO层)

模拟服务响应慢场景

在服务的dao层加了一个sleep休眠10S

在这里插入图片描述

现在请求后需要10.2才有响应

在这里插入图片描述

trace排查问题(具体情况具体分析)

Arthas 怎么附加到selfServiceMachine应用进程步骤在以下文章

01)阿里 Arthas(阿尔萨斯)开源的 Java 诊断工具下载、入门教程,windwos/linux系统使用Arthas备注

选择需要附加的进程成功后如下图所示
在这里插入图片描述

步骤一:使用 trace 命令定位整体调用链路耗时

trace 命令可以统计方法调用路径中每个节点的耗时,非常适合分析性能瓶颈。

先使用trace 跟踪controller层 请求入口方法
trace com.bsoft.selfServiceMachine.controller.MachineController getReportRecordByTjbhOrZjm

跟踪上了方法
在这里插入图片描述

前端调用下selfServiceMachine/machineController/getReportRecordByTjbhOrZjm服务触发

Arthas 跟踪getReportRecordByTjbhOrZjm方法执行输出的内容
在这里插入图片描述
源码内容,可以看到Arthas 跟踪输出的内容和源码对应的,已经明确显示了107行 machineService.getReportRecordByTjbhOrZjm方法执行了 约10S
在这里插入图片描述

检测到service层执行了约10S,使用trace 跟踪service层方法

由于已经代码,service层就一个调用dao的代码,这里基本锁定在dao层了
在这里插入图片描述

trace com.bsoft.selfServiceMachine.service.impl.MachineServiceImpl getReportRecordByTjbhOrZjm

在这里插入图片描述

检测到dao层执行了约10S,使用trace 跟踪dao层方法
trace com.bsoft.selfServiceMachine.dao.MachineDao getReportRecordByTjbhOrZjm

输出dao层执行了约10S,显示dao层调用的方法执行最慢的也是4ms,并没有显示sleep方法执行了10S,
原因是因为 sleep 是 JDK 阻塞调用,不产生子方法,trace 不会展开它,不过看到这个输出至少告诉了我们正常的业务方法都不卡,我们看下代码是不是有Thread.sleep、Lock、I/O 阻塞、无限循环 这类“不产生方法调用但耗时”的问题
在这里插入图片描述

使用 stack 实时抓取调用栈

stack com.bsoft.selfServiceMachine.dao.MachineDao getReportRecordByTjbhOrZjm

stack就是打印方法执行的栈信息
在这里插入图片描述
从servlet入口方法直到调用到MachineDao getReportRecordByTjbhOrZjm方法的中间过程,但是没有调用时间之类的显示,只能用来看栈链信息
在这里插入图片描述

profiler 火焰图排查问题(不支持windwos)

Arthas 的 profiler 命令底层依赖的是 Async-Profiler,这是一个由 Alibaba 开源的高性能采样分析器。
对于 Thread.sleep、Lock、I/O 阻塞、无限循环 这类“不产生方法调用但耗时”的问题,一定要用 profiler 火焰图,它是 Arthas 中最强大的性能分析工具。

找了一台linux服务器使用tomcat容器启动selfServiceMachine项目,端口8089

由于服务器有多个tomcat启动,无法区分的话就先使用tomcat端口号查询出进程PID在选择即可
在这里插入图片描述
在这里插入图片描述

# 启动
profiler start

在这里插入图片描述
调用几次接口后停止

# 停止,停止后会打印出分析内容的存储位置
profiler stop

在这里插入图片描述

不过看不懂…
在这里插入图片描述

http://www.dtcms.com/a/398194.html

相关文章:

  • RNN-Gauss / RNN-GMM 模型的结构
  • Spring框架接口之RequestBodyAdvice和ResponseBodyAdvice
  • Unity 性能优化 之 打包优化( 耗电量 | 发热量 | 启动时间 | AB包)
  • 北京南站在几环山西路桥建设集团网站
  • 北京专业网站建设公司哪家好网站及备案
  • RabbitMQ-保证消息不丢失的机制、避免消息的重复消费
  • 分布式之RabbitMQ的使用(1)
  • 基于Java后端与Vue前端的MES生产管理系统,涵盖生产调度、资源管控及数据分析,提供全流程可视化支持,包含完整可运行源码,助力企业提升生产效率与管理水平
  • 阿里云ACP云计算和大模型考哪个?
  • RabbitMQ C API 实现 RPC 通信实例
  • Ingress原理:七层流量的路由管家
  • 代理网站推荐做网站公司是干什么的
  • 个人建设门户网站 如何备案网址域名注册信息查询
  • React 19 vs React 18全面对比,掌握最新前端技术趋势
  • 链改2.0倡导者朱幼平:内地RWA代币化是违规的,但RWA数资化是可信可行的!
  • iOS 混淆后崩溃分析与符号化实战,映射表管理、自动化符号化与应急排查流程
  • 【JavaSE】【网络原理】网络层、数据链路层简单介绍
  • PyTorch 神经网络工具箱核心内容
  • Git高效开发:企业级实战指南
  • 外贸营销型网站策划中seo层面包括影楼网站推广
  • ZooKeeper详解
  • RabbitMQ如何构建集群?
  • 【星海随笔】RabbitMQ开发篇
  • 深入理解 RabbitMQ:消息处理全流程与核心能力解析
  • docker安装canal-server(v.1.1.8)【mysql->rabbitMQ】
  • 学习嵌入式的第四十天——ARM
  • 佛山营销网站建设公司益阳市城乡和住房建设部网站
  • Linux磁盘数据挂载以及迁移
  • 【图像算法 - 28】基于YOLO与PyQt5的多路智能目标检测系统设计与实现
  • Android音视频编解码全流程之Muxer