Arthas性能定位工具

本文介绍了开源工具Arthas在Java应用中的诊断和性能测试中的作用,包括下载、启动、常用命令如dashboard、thread、trace和heapdump的使用,以及通过实际案例演示了如何使用trace定位和解决性能问题的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

Arthas 是一款开源的 Java 诊断工具,它可以帮助开发人员进行 Java 应用的实时诊断和故障排查。它提供了丰富的命令和功能,可以用于监控应用程序的运行状态、查看线程堆栈、跟踪方法调用、修改变量值等。在日常性能测试过程中,用来排查性能耗时问题必不可少。

使用方式

1、下载arthas工具

wget https://github.com/hengyunabc/katacoda-scenarios/raw/master/demo-arthas-spring-boot.jar

2、启动arthas

本身就是一个java程序,使用下述命令启动:

java -jar arthas-boot.jar

在启动界面选择自己要定位的服务,我这个是在本机上执行,有多个项目。这里提一个Pod的场景,现在一般都是运行在k8s环境中,我们服务是运行在Pod的容器里,所以如果要定位对应的服务需要把arthas拷贝到对应的Pod容器里,然后开启:

//复制文件
kubectl cp {本地文件路径} -c {容器名} {Pod命名空间}/{Pod名称}:{拷贝到容器的路径}

//进入Pod
kubectl exec -it {Pod名称} -n {Pod命令空间} -- /bin/bash

3、常用命令

下面介绍一些arthas的常用命令:

dashboard -i 3000

查看实时数据面板,-i代表数据刷新的时间间隔,单位毫秒,默认值5000

thread -n 3 

查看当前最忙的三个线程

 thread --state [state]

查看指定状态的线程

thread [id] 

查看指定线程的堆栈信息

 monitor -c 1 [类名] [方法名]

查看方法耗时

monitor -c 1 com.qt.wisteria.detect.v2.ids.eventflow.handler.WebshellCheckResultHandler handle

trace [类名] [方法名]  -n 10000 --skipJDKMethod false 

追踪方法重点耗时区域,相比monitor,这里会打印整个发放执行的时间以及方法里面的子方法的执行耗时

jad [类名全路径] 

反编译代码,可以在线查看部署的包代码是否正确

heapdump

生成dump文件

实际案例

平时arthas使用最多的地方就是定位性能问题,一般在进行性能测试的时候都会通过脚本的方式进行大量的请求上报,这个时候如果发现接口慢短时间内是很难定位到到底是哪里耗时长,特别是针对那些业务逻辑复杂的,方法嵌套方法这种,今天就用一个实际案例看下如何用arthas定位性能问题,其实主要用到的是trace方法。

在介绍之前有些注意点我们需要知道,arthas是实时定位的,也就是程序在跑的时候,我们才可以定位到,比如我们用trace定位某个方法,只有这个方法有访问才可以,所以一般是开启工具,然后进行压测,实时监控情况。

测试性能发现incidents接口慢,用trace定位第一级接口耗时:

从耗时中可以看到这个方法里面的一些操作耗时,最耗时的是page方法,那么接着用trace定位page方法:

page方法显示是在一个mongo的stream查询里耗时最长,接着往下定位mongo的streamIncludes方法:

最终发现这里里面的操作都是很快的,但是mongo的streamIncludes是一个循环遍历的操作,这里遍历的数据量太大,导致整体耗时较长。

上述这个是一个比较简单的示例,实际使用中可能有更复杂的场景,但是方法是一样的,trace方法可以连续使用,只要我们的性能测试程序一直在跑。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值