Alibaba Arthas学习与使用

Alibaba Arthas学习与使用

目录

  • 下载安装
  • 卸载
  • 退出
  • 快捷键
  • 重点部分: 命令
    • dashboard
    • thread
    • jvm
    • sysprop
    • sysenv
    • vmoption
    • getstatic
    • ognl
    • sc
    • sm
    • jad
    • mc
    • redefine
    • dump
    • classloader
    • monitor
    • watch
    • trace
    • stack
    • tt
    • options
    • profiler

下载安装

# 下载
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
# 启动arthas
java -jar arthas-boot.jar
# 如果端口号被占用(arthas已经粘附一个进程),可以换另一个端口号执行
java -jar arthas-boot.jar --telnet-port 9998 --http-port -1

卸载

rm -rf ~/.arthas/
rm -rf ~/logs/arthas

退出

可以使用quit或exit命令,下次连接会自动连接上粘附的进程。stop退出结束连接。

快捷键

  • keymap 显示Arthas对应的快捷键
    Alibaba Arthas学习与使用_第1张图片

重点部分: 命令

dashboard

显示当前系统实时数据面板,按q或ctrl+c退出

Alibaba Arthas学习与使用_第2张图片

thread

查看当前jvm的线程堆栈信息
Alibaba Arthas学习与使用_第3张图片

jvm

查看当前JVM的信息

Alibaba Arthas学习与使用_第4张图片

sysprop

查看和修改jvm的系统属性
Alibaba Arthas学习与使用_第5张图片

sysenv

查看当前jvm的环境属性
Alibaba Arthas学习与使用_第6张图片

vmoption

查看,更新jvm诊断相关的参数
Alibaba Arthas学习与使用_第7张图片

getstatic

通过getstatic命令可以方便的查看类的静态属性

getstatic 类名 属性名

在这里插入图片描述

ognl

执行ognl表达式,这是从3.0.5版本新增的功能

OGNl语法

https://commons.apache.org/proper/commons-ognl/language-guide.html

Alibaba Arthas学习与使用_第8张图片
Alibaba Arthas学习与使用_第9张图片

sc

查看jvm已加载的类信息,"Search Class"的缩写,这个命令可以搜索出所有已经加载到jvm中的class信息,sc默认开启了子类匹配功能,也就是说当前类的子类也会被搜索出来,想要精准匹配,需要打开 optionsdisable-sub-class true 的开关

Alibaba Arthas学习与使用_第10张图片

sm

"Search Method"的缩写,搜索所有已经加载了class信息的方法信息。
sm命令只能看到由当前类声明的方法,父类无法看到

Alibaba Arthas学习与使用_第11张图片

jad

反编译指定已加载类的源码
在这里插入图片描述

//反编译指定类
jad java.lang.String
//反编译指定类中的指定方法
jad java.lang.String trim

mc

在内存中把源代码编译成字节码

//编译
mc /root/Hello.java
//编译到指定目录
mc /root/Hello.java -d /tmp

redefine

把新生成的字节码文件在内存中执行,加载外部的.class文件,redefine到jvm里

注意:redefine后原来的类不可恢复,redefine有可能失败(比如增加了新的成员变量)
reset命令对redefine的类无效。如果想重置,需要redefine原始的字节码。
redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果再执行上面提到的命令,则会把redefine的字节码重置。

redefine的限制

  • 不允许新增加成员变量和方法,只允许在原有的上面修改
  • 正在执行的函数,没有退出不能生效。

结合jad/mc命令使用

# 1.使用jad反编译demo.MathGame输出到/root/MathGame.java
jad --source-only demo.MathGame > /root/MathGame.java

# 2.按上面的代码编辑完,使用mc对内存中的新代码编译
mc /root/MathGame.java -d /root

# 3.使用redefine命令加载新的字节码
redefine /root/demo/MathGame.class

dump

将已加载类的字节码文件保存到特定目录: logs/arthas/classdump/

Alibaba Arthas学习与使用_第12张图片
Alibaba Arthas学习与使用_第13张图片

classloader

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

Alibaba Arthas学习与使用_第14张图片

在这里插入图片描述

monitor

监控指定类中方法的执行情况

Alibaba Arthas学习与使用_第15张图片

Alibaba Arthas学习与使用_第16张图片

watch

观察指定方法的调用情况,能观察到的范围:返回值、抛出的异常、入参,通过OGNL表达式进行对应变量的查看

Alibaba Arthas学习与使用_第17张图片
Alibaba Arthas学习与使用_第18张图片

trace

对方法内部调用进行跟踪,并输出方法路径上每个节点上的耗时
Alibaba Arthas学习与使用_第19张图片

Alibaba Arthas学习与使用_第20张图片

stack

输出方法被调用的调用路径

Alibaba Arthas学习与使用_第21张图片

tt

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

Alibaba Arthas学习与使用_第22张图片
Alibaba Arthas学习与使用_第23张图片

options

arthas全局开关

Alibaba Arthas学习与使用_第24张图片

profiler

生成火焰图,profiler命令支持生成应用热点火焰图。本质上是通过不断采样,然后把采集结果生成火焰图。命令基本运行结构是profiler命令 [命令参数]

启动profiler

# 默认情况下生成的是cpu的火焰图,即event为cpu。可以用--event参数来指定
profile start
# 停止采样,并生成火焰图
profile stop

Alibaba Arthas学习与使用_第25张图片

Alibaba Arthas学习与使用_第26张图片
Alibaba Arthas学习与使用_第27张图片

你可能感兴趣的:(学习,jvm,java)