Java线上诊断工具:Arthas简单快速学习

1、概述

1.1、Arthas(阿尔萨斯)可以做什么

Arthas 是Alibaba开源的Java诊断工具。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

  • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  • 是否有一个全局视角来查看系统的运行状况?
  • 有什么办法可以监控到JVM的实时运行状态?
  • 怎么快速定位应用的热点,生成火焰图?
    Arthas支持jdk6+,多种系统版本,采用命令行交互模式,同时提供丰富的tab自动补全功能,进一步方便我们进行问题的定位和诊断

1.2、快速安装

1.2.1、Linux下按

下载arthas-boot.jar,在使用java -jar方式启动即可。

命令

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

**注意:**在进行第二条命令之前,先运行一个Java程序在内存之中,否则会报错

2、快速入门

2.1、attach一个进程

目标:
1、执行一个jar包
2、通过arthas来attach来追踪
3、进行常用的命令操作

如果端口号被占用,也可以通过命令换成另一个端口号执行。

java -jar arthas-boot.jar --telnet-port 9998 --http-port -1

总结:
1、启动进程
2、启动arthas-boot.jar,进入启动的进程
3、不但可以通过命令行的方式来操作arthas也可以通过浏览器来访问arthas

2.2、常用命令接触

1、dashboard仪表板
2、通过thread命令来获取到arthas-demo进程的Main Class
3、通过jad来反编译Main Clas
4、wathch具体方法

2.2.1.、dashboard仪表板

在这里插入图片描述

2.2.2、通过thread命令来获取到arthas-demo进程的Main Class

在这里插入图片描述

2.2.3、通过jad反编译Main Class

jad demo.MathGame  // 包名+类名

在这里插入图片描述

2.2.4、watch监视

watch demo.MathGame primeFactors returnObj

demo.MathGame primeFactors:
demo.MathGame:包名+类名
primeFactors:方法名
returnObj:返回参数的表达式

2.2.5、退出arthas

如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。
如果想完全退出arthas,可以执行stop命令
在这里插入图片描述

2.3、基础命令1

1、help:查看所有帮助信息
2、cat:显示文本文件内容
3、grep:匹配查找,和linux中的grep类似,但只能用于管道命令
在这里插入图片描述

4、pwd:显示当先目录的目录地址
5、cls:清屏

2.4、基础命令2

1、session:查看当前会话信息
在这里插入图片描述

2、reset:重置增强类,将被arthas增强过的类全部还原,arthas服务端关闭时会重置所有增强过的类
在这里插入图片描述
在这里插入图片描述
3、version:输出当前目标Java进程所加载 的Arthas版本号
4、quit:退出当前Arthas客户端,其他Arthas客户端不受影响。
5、stop:关闭Arthas服务端,所有Arthas客户端全部退出。
6、keymap:Arthas快捷键列表及自定义快捷键
7、history:和linux系统作用一样 打印命令历史

3、JVM相关命令

1、dashboard
在这里插入图片描述

2、thread 线程相关:查看当前jvm的线程堆栈的信息
在这里插入图片描述

3、jvm 虚拟机相关
4、sysprop 系统属性相关
5、sysenv:查看当前jvm的环境属性
在这里插入图片描述

6、vmoption:查看、更新vm诊断相关的参数
7、getstatic:方便的查看类的静态属性
语法:getstatic 类名 属性名

8、ognl
在这里插入图片描述

3.1、反编译 jad

比如编译string类

jad java.lang.String --source-only

–source-only : 只显示源码

只反编译指定的方法

jad java.lang.String xx

xx 就是方法名

3.2、内存编译mc

内存编译器,编译.java文件生成.class
在这里插入图片描述
在这里插入图片描述

4、Arthas进阶

4.1、目标

类与类加载器
monitor、watch、trace、stack等核心命令的使用
火焰图的生存
arthas实战案例

4.2、dump

将已加载的字节码文件保存到特定的目录下,logs/arthas/classdump/
在这里插入图片描述
举例:

dump java.lang.String

在这里插入图片描述

4.3、classloader

获取类加载器的信息
作用:
将jvm中所有的classloader的信息统计出来,并可以展示继承树,urls等。
让指定的classloader去getResources,打印出所有查找到的resources的url。

在这里插入图片描述

4.4、monitor

监控指定类中方法的执行情况
作用:
在这里插入图片描述

过5秒监控一次某个方法
monitor 包.类 primeFactor -c 5

在这里插入图片描述

4.5、watch(重要)

观察到指定方法的调用情况

作用:
方法执行数据观测,方便观测到指定方法的调用情况
能观察到的范围:返回值、抛出异常、入参。通过编写OGNL表达式进行对应变量的查看
在这里插入图片描述
在这里插入图片描述
只查看第一个参数小于0的情况

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值