Arthas(阿尔萨斯)是阿里巴巴开源的 Java 诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
是否有一个全局视角来查看系统的运行状况?
有什么办法可以监控到JVM的实时运行状态?
Arthas 采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
1、安装与启动
curl -L https://arthas.gitee.io/install.sh | sh
java -jar arthas-boot.jar
选择进程号,也可以在启动的时候加上参数进程号。(Arthas也提供了界面形式交互)
2、常用命令
1)dashboard:显示进行信息包括线程、JVM、操作系统信息三部分
2)thread -n 指定最忙的前N个线程并打印堆栈
3)jad 反编译文件 mc 编译java文件 redefine 重新加载字节码文件。结合三个命令可以修改加载的class文件并重新加载到内存里面
4) 排查线上问题最长使用的命令:watch 类名 方法明 ognl表达式(这里监控第一个参数与返回值) 监控条件(这里为第一个参数的nickname等于test)
5)trace用来查找方法内部的调用以及各方法的耗时,对于优化性能很重要
6)stack用来寻找方法的调用路径、即谁调用了该方法(对于排查方法的调用路径以及error reason很重要)
7)tt保存方法一段时间内的调用现场
可以通过-i参数来查看详细调用
- 排查程序性能问题 profiler 并生成火焰图(火焰图的没一层越宽表示占用cpu时间越长、代表瓶颈),可以导出来svg或者其他形式的图来分析
9)退出客户端 quit 退出arthas服务端 shutdown、stop
以上就是Arthas进行性能分析与问题排查的大概命令了 、更详细的命令请参考官网、欢迎大家进行补充。
评论区