Arthas教程

目录

Arthas 介绍什么是Arthas,它能为我们做什么Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。

Arthas相关地址

基础教程

启动arthas-boot

常用命令

Dashboard

thread

sc

 sm

jad

watch

Exit/Shutdown

进阶教程

常用命令

查看JVM信息

sysprop

sysenv

jvm


 


Arthas 介绍
什么是Arthas,它能为我们做什么
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?

Arthas支持JDK 6+,支持Linux/Mac/Winodws,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

Arthas相关地址

基础教程

启动arthas-boot

下载arthas-boot.jar或者下载后上传到服务器

linux 下载命令
wget https://alibaba.github.io/arthas/arthas-boot.jar

 jar包(阿里网盘)

https://www.aliyundrive.com/s/PeKS4aoqqgm

再用java -jar命令启动(以下命令不区分系统)

java -jar arthas-boot.jar --target-ip 0.0.0.0

arthas-bootArthas的启动程序,它启动后,会列出所有的Java进程。

 选择需要诊断的目标进程,再Enter/回车,Attach成功之后,会打印Arthas LOGO。

常用命令

Dashboard

dashboard 命令可以查看当前系统的实时数据面板。

输入 Q 或者 Ctrl+C 可以退出dashboard命令。

 

thread

thread 命令会打印线程的栈。

 

Arthas支持管道,可以用 thread 23 | grep run 查找到run class

sc

可以通过 sc 命令来查找JVM里已加载的类:

sc -d  类名
sc -d  *.EurekaApplication

如果搜索的是接口,还会搜索所有的实现类。比如查看所有的Filter实现类:

sc  javax.servlet.Filter

通过-d参数,可以打印出类加载的具体信息,很方便查找类加载问题。

sc -d javax.servlet.Filter

sc支持通配,比如搜索所有的StringUtils

 

 sm

sm命令则是查找类的具体方法或者函数。

sm java.math.RoundingMode

sm  com.wzg.api.controller.MemberController

支持使用通配符
sm  *.MemberController
 

通过-d参数可以打印函数的具体属性


sm -d  *.MemberController

jad

可以通过 jad 命令来反编译代码

jad  路径
jad  com.shentantech.traffic.eureka.EurekaApplication

通过--source-only参数可以只打印出在反编译的源代码

jad --source-only  com.shentantech.traffic.eureka.EurekaApplication

watch

通过watch命令可以查看函数的参数/返回值/异常信息。


查看参数
watch  com.wzg.api.controller.MemberController getMemberNameByparam param


查看返回值
watch  com.wzg.api.controller.MemberController getMemberNameByparam returnObj

  1. 第一个参数是类名,支持通配
  2. 第二个参数是函数名,支持通配
  3. 返回值表达式
    在上面的例子里,第三个参数是返回值表达式,它实际上是一个ognl表达式,它支持一些内置对象:

    loader
    clazz
    method
    target
    params
    returnObj
    throwExp
    isBefore
    isThrow
    isReturn
    你可以利用这些内置对象来组成不同的表达式。比如返回一个数组

watch  *.MemberController  * '{params,returnObj}'

更多参考: https://alibaba.github.io/arthas/advice-class.html

watch命令支持在第4个参数里写条件表达式,比如

watch  *.MemberController  * returnObj 'params[0]> 12'

 

 

当异常时捕获

watch命令支持-e选项,表示只捕获抛出异常时的请求

按照耗时进行过滤

watch命令支持按请求耗时进行过滤

watch com.example.demo.arthas.user.UserController * '{params, returnObj}' '#cost>200'

输入 Q 或者 Ctrl+C 退出watch命令。

Exit/Shutdown

  • 退出Arthas

                用 exit 或者 quit 命令可以退出Arthas。

                退出Arthas之后,还可以再次用 java -jar arthas-boot.jar 来连接。

  • 彻底退出Arthas

                exit/quit命令只是退出当前session,arthas server还在目标进程中运行。

                想完全退出Arthas,可以执行 shutdown 命令。

进阶教程

常用命令

查看JVM信息

sysprop

  • 可以通过sysprop打印所有的System Properties信息 
sysprop

      

  •  也可以指定单个key:
sysprop java.version

  • 也可以通过grep来过滤:
sysprop |grep java

  •  可以设置新的value:sysprop key value 例如:
sysprop testKey testValue

sysenv

可以sysenv命令获取到环境变量。和sysprop命令类似。

sysenv

 

jvm

jvm 命令会打印出JVM的各种详细信息。

 

使用技巧

自动补全

Arthas支持丰富的自动补全功能,在使用有疑惑时,可以输入Tab来获取更多信息。

比如输入 sysprop java. 之后,再输入Tab,会补全出对应的key:

readline的快捷键支持

Arthas支持常见的命令行快捷键,比如Ctrl + A跳转行首,Ctrl + E跳转行尾。

更多的快捷键可以用 keymap 命令查看。

 

 历史命令的补全

如果想再执行之前的命令,可以在输入一半时,按Up/↑ 或者 Ddown/↓,来匹配到之前的命令。

比如之前执行过sysprop java.version,那么在输入sysprop ja之后,可以输入Up/↑,就会自动补全为sysprop java.version。

如果想查看所有的历史命令,也可以通过 history 命令查看到。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值