在线安装Arthas以及常用命令介绍

Arthas介绍:arthas(阿尔萨斯)是阿里巴巴开源的一款 Java 诊断工具,它可以对运行中的 Java 程序进行实时监控和故障排查。Arthas 提供了丰富的功能,如线程分析、内存分析、类加载分析等,帮助开发者快速定位问题并提高开发效率。

主要功能:

  1. 实时监控:查看 JVM 参数、系统参数、类加载情况等;
  2. 远程调试:通过 gdb 进行远程调试;
  3. 线程分析:查看线程状态、调用栈等;
  4. 内存分析:查看对象引用关系、GC 情况等;
  5. 类加载分析:动态修改类加载器、热部署等;
  6. 命令行操作:执行任意 shell 命令;
  7. 性能分析:查看方法耗时、CPU 使用率等。

工具:https://arthas.aliyun.com/

在线安装Arthas以及常用命令介绍_第1张图片

安装arthas

输入命令

curl -O https://alibaba.github.io/arthas/arthas-boot.jar

启动

java -jar arthas-boot.jar

在线安装Arthas以及常用命令介绍_第2张图片

出现所有可监控的进程,输入要监控的进程,回车

在线安装Arthas以及常用命令介绍_第3张图片

执行监控进程后,若报错

在线安装Arthas以及常用命令介绍_第4张图片

可能原因为java环境变量配置不正确

输入 echo $JAVA_HOME 查看自己jdk环境变量与安装是否匹配

在刷新环境变量 source ~/.bash_profile

IDEA安装Arthas插件:作用自动生成对应命令

在线安装Arthas以及常用命令介绍_第5张图片

此时在代码中对应方法上右键会出现 Arthas Command 接着就可以选择右侧对应相关命令

在线安装Arthas以及常用命令介绍_第6张图片

常用命令

dashboard

作用:仪表板,类似于监控作用,输入q或者ctr+c退出

在线安装Arthas以及常用命令介绍_第7张图片

thread

作用:可以获取到当前虚拟机中内存堆栈信息

[n:] 指定最忙的前n个线程并打印堆栈

[b] 找出当前阻塞其他线程的线程

[i ] cpu占比统计采样间隔,单位毫秒

在线安装Arthas以及常用命令介绍_第8张图片

jad

作用:反编译源代码

输入jad:包名+类名

在线安装Arthas以及常用命令介绍_第9张图片

watch

作用:方法执行数据观测,让你能方便的观察到指定方法的调用情况。

能观察到的范围为:返回值、抛出异常、入参,通过编写OGNL 表达式进行对应变量的查看。

class-pattern 类名表达式匹配

method-pattern 方法名表达式匹配

express 观察表达式

condition-express 条件表达式

[b] 在方法调用之前观察 before

[e] 在方法异常之后观察 exception

[s] 在方法返回之后观察

[f] 在方法结束之后(正常返回和异常返回)观察 finally

[E] 开启正则表达式匹配,默认为通配符匹配

[x:] 指定输出结果的属性遍历深度,默认为 1

idea复制对应命令后,若接口被调用则会触发

在线安装Arthas以及常用命令介绍_第10张图片

观察demo.MathGame类中primeFactors方法出参和返回值,结果属性遍历深度为2。

在线安装Arthas以及常用命令介绍_第11张图片

dump

作用:将已经加载类的字节码文件保存到特定目录,默认路径

logs/arthas/classdump/

class-pattern 类名表达式匹配

[c:] 类所属class loader的hashcode

[E] 开启正则表达式匹配,默认为通配符匹配

在线安装Arthas以及常用命令介绍_第12张图片

将正在虚拟机中运行的程序的字节码文件保存在对应目录下

monitor

作用:监视指定类中方法的执行情况:用来监视一个时间段中指定方法的执行次数,成功次数,失败次数,耗时等这些信息

class-pattern 类名表达式匹配

method-pattern . 方法名表达式匹配

[E] 开启正则表达式匹配,默认为通配符匹配

[c:] 统计周期,默认值为120秒

eg:

过5秒监控一次,类demo.MathGame中primeFactors方法

monitor -C 5 demo.MathGame primeFactors

在线安装Arthas以及常用命令介绍_第13张图片

trace

作用:

trace 命令能主动搜索 class-pattern /method-pattern对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。

观察表达式的构成主要由ognl 表达式组成,所以你可以这样写“{params,returnobj}",只要是一个合法的 ognl表达式,都能被正常支持。

很多时候我们只想看到某个方法的r大于某个时间之后的trace结果,现在Arthas可以按照方法执行的耗时来进行过滤了,例如trace *stringUtils isBlank‘#Cost>100’表示当执行时间超过100ms的时候,才会输出trace的结果。

watch/stack/trace这个三个命令都支持#cost耗时条件过滤

trace

作用:函数指定类的指定方法

在线安装Arthas以及常用命令介绍_第14张图片

执行2次 trace demo.MathGame run -n 2

大于0.5毫秒的方法 trace demo.MathGame run'#cost ›. 5'

tt

watch 星然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。

这个时候如果能记录下当时方法调用的所有入参和返回值、拋出的异常会对整个问题的思考与判断非常有帮助。于是乎,TimeTunnel 命令就诞生了。

time-tunnel时间隧道

记录下指定方法每次调用的入参和返回信息,并能对这些不同时间下调用的信息进行观测

常用命令:

-t

tt命令有很多个主参数,-t就是其中之一。这个参数表明希望记录下类 *Test 的print 方法的每次执行情况。

-n

当你执行一个调用量不高的方法时可能你还能有足够的时间用 CTRL+C 中断七 命令记录的过程,但如果遇到调用量非常大的方法,瞬间就能将你的JVM 内存撑爆。

此时你可以通过 -n 参数指定你需要记录的次数,当达到记录次数时 Arthas 会主动中断比命令的记录过程,避免人工操作无法停止的情况。

在线安装Arthas以及常用命令介绍_第15张图片

解决方法重载

tt -t *Test print params.length==1

通过制定参数个数的形式解决不同的方法签名,如果参数个数一样,你还可以这样写

tt -t *Test print 'params [1] instanceof Integer'

•解决指定参数

tt -t *Test print params [0].mobile=="13989838402"

你可能感兴趣的:(arthas,线上诊断工具,mac,运维)