欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Arthas

程序员文章站 2022-07-15 15:38:31
...

安装

  1. 使用arthas-boot(推荐)
    下载arthas-boot.jar,然后用java -jar的方式启动:
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
  1. 使用as.sh
    Arthas 支持在 Linux/Unix/Mac 等平台上一键安装:
curl -L https://alibaba.github.io/arthas/install.sh | sh

上述命令会下载启动脚本文件 as.sh 到当前目录,直接在shell下面执行./as.sh,就会进入交互界面。输入进程前面的***,再输入回车/enter,Arthas会attach到目标进程上。

使用

基础命令

  • help——查看命令帮助信息
  • cat——打印文件内容,和linux里的cat命令类似
  • pwd——返回当前的工作目录,和linux命令类似
  • cls——清空当前屏幕区域
  • session——查看当前会话的信息
  • reset——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
  • version——输出当前目标 Java 进程所加载的 Arthas 版本号
  • history——打印命令历史
  • quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
  • shutdown——关闭 Arthas 服务端,所有 Arthas 客户端全部退出
  • ctrl+c——中断执行

jvm相关

  • dashboard——当前系统的实时数据面板
  • thread——查看当前 JVM 的线程堆栈信息
  • jvm——查看当前 JVM 的信息
  • sysprop——查看和修改JVM的系统属性
  • sysenv——查看JVM的环境变量
  • vmoption——查看和修改JVM里诊断相关的option
  • logger——查看和修改logger
  • getstatic——查看类的静态属性
  • heapdump——dump java heap, 类似jmap命令的heap dump功能

class/classloader相关

  • sc——查看JVM已加载的类信息
  • sm——查看已加载类的方法信息
  • jad——反编译指定已加载类的源码
  • mc——内存编绎器,内存编绎.java文件为.class文件
  • redefine——加载外部的.class文件,redefine到JVM里
  • dump——dump 已加载类的 byte code 到特定目录
  • classloader——查看classloader的继承树,urls,类加载信息,使用classloader去getResource

monitor/watch/trace相关

请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 shutdown 或将增强过的类执行 reset 命令。

  • monitor——方法执行监控
  • watch——方法执行数据观测
  • trace——方法内部调用路径,并输出方法路径上的每个节点上耗时
  • stack——输出当前方法被调用的调用路径
  • tt——方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

常用示例

watch

watch 命令定义了4个观察事件点,即 -b 方法调用前,-e 方法异常后,-s 方法返回后,-f 方法结束后。4个观察事件点 -b、-e、-s 默认关闭,-f 默认打开。要注意方法入参和方法出参的区别,有可能在中间被修改导致前后不一致,除了 -b 事件点 params 代表方法入参外,其余事件都代表方法出参。当使用 -b 时,由于观察事件点是在方法调用前,此时返回值或异常均不存在。

观察方法返回值(-n 2表示只观察两次)

watch demo.MathGame primeFactors {returnObj} -x 2 -n 2

观察方法出参和返回值

watch demo.MathGame primeFactors "{params,returnObj}" -x 2

观察方法入参

watch demo.MathGame primeFactors "{params}" -x 2 -b

只观察满足指定条件时的值

watch demo.MathGame primeFactors "{params[0]}" "params[0]<0"

观察异常信息

watch demo.MathGame primeFactors "{throwExp}" -e -x 2

按照耗时进行过滤

watch demo.MathGame primeFactors '{params, returnObj}' '#cost>200' -x 2

观察当前对象中的属性

watch demo.MathGame primeFactors 'target'
watch demo.MathGame primeFactors 'target.illegalArgumentCount'

当前对象中的属性,可以使用target关键字,代表当前对象,可以使用target.field_name访问当前对象的某个属性

trace

trace demo.MathGame run

过滤掉JDK方法

trace -j  demo.MathGame run

据调用耗时过滤

trace demo.MathGame run '#cost > 10'