arthas常用命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arthas常用命令相关的知识,希望对你有一定的参考价值。
参考技术A执行成功后, arthas提供了一种命令行方式的交互方式, arthas会检测当前服务器上的Javai程,并将进程列表展示出来,用户输入对应的编号(1.2.3.4.)进行选择,然后回车。
方式1:
方式2:运行时选择Java进程PID
quit
通过图中的thread区域可以看出当前占用cpu最高的两个是jvm内部线程
Java 8之后支持获取JVM内部线程CPU时间,这些线程只有名称和CPU时间,没有ID及状态等信息(显示ID为-1)。 通过内部线程可以观测到JVM活动,如GC、JIT编译等占用CPU情况,方便了解JVM整体运行状况。
JVM内部线程包括下面几种:
注意:线程栈为第二采样结束时获取,不能表明采样间隔时间内该线程都是在处理相同的任务。建议间隔时间不要太长,可能间隔时间越大越不准确。 可以根据具体情况尝试指定不同的间隔时间,观察输出结果。
默认按照CPU增量时间降序排列,只显示第一页数据,默认按照CPU增量时间降序排列。
显示所有匹配线程信息,有时需要获取全部JVM的线程数据进行分析。
thread -b, 找出当前阻塞其他线程的线程
找到阻塞其他线程的线程,即当前占用锁的线程
注意, 目前只支持找出synchronized关键字阻塞住的线程, 如果是 java.util.concurrent.Lock , 目前还不支持。
thread -i 1000 : 统计最近1000ms内的线程CPU时间。
thread -n 3 -i 1000 : 列出1000ms内最忙的3个线程栈
“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息,这个命令支持的参数有 [d] 、 [E] 、 [f] 和 [x:] 。
“Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。
sm 命令只能看到由当前类所声明 (declaring) 的方法,父类则无法看到。
sc看类信息,sm可以看类的方法信息,两者正好可以结合者来看。
java -jar arthas-boot.jar --tunnel-server ws://172.16.12.95:7777/ws
help 查看命令帮助信息
cls 清空当前屏幕区域
session 查看当前会话的信息
reset 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
version 输出当前目标 Java 进程所加载的 Arthas 版本号
history 打印命令历史
quit 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
stop 关闭 Arthas 服务端,所有 Arthas 客户端全部退出
keymap Arthas快捷键列表及自定义快捷键
dashboard 当前系统的实时数据面板
thread 查看当前 JVM 的线程堆栈信息
watch 方法执行数据观测
trace 方法内部调用路径,并输出方法路径上的每个节点上耗时
stack 输出当前方法被调用的调用路径
tt 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
monitor 方法执行监控
jvm 查看当前 JVM 信息
vmoption 查看,更新 JVM 诊断相关的参数
sc 查看 JVM 已加载的类信息
sm 查看已加载类的方法信息
jad 反编译指定已加载类的源码
classloader 查看 classloader 的继承树,urls,类加载信息
heapdump 类似 jmap 命令的 heap dump 功能
arthas常用命令整理
Arthas Install — Arthas 3.5.4 文档Arthas Install — Arthas 3.5.4 文档
今天是1024程序员节。昨天研究了下arthas整理一下笔记
常用命令
watch watch — Arthas 3.5.4 文档
同时观察方法调用前和方法返回后 $ watch demo.MathGame primeFactors "{params,target,returnObj}" -x 2 -b -s -n 2
观察异常信息的例子 $ watch demo.MathGame primeFactors "{params[0],throwExp}" -e -x 2
观察方法入参和出参
"{params,returnObj}" -x 2 -b -s"{params,returnObj}" -x 2 -b -s
常用表达式 观察入参出参和异常
"{params,returnObj,throwExp}" -x 2 -b -s -e
watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象
参数名称 | 参数说明 |
class-pattern | 类名表达式匹配 |
method-pattern | 方法名表达式匹配 |
express | 观察表达式,默认值:{params, target, returnObj} |
condition-express | 条件表达式 |
[b] | 在方法调用之前观察 before |
[e] | 在方法异常之后观察 |
[s] | 在方法返回之后观察 |
[f] | 在方法结束之后(正常返回和异常返回)观察 |
[E] | 开启正则表达式匹配,默认为通配符匹配 |
[x:] | 指定输出结果的属性遍历深度,默认为 1 |
这里重点要说明的是观察表达式,观察表达式的构成主要由 ognl 表达式组成,所以你可以这样写"{params,returnObj}",只要是一个合法的 ognl 表达式,都能被正常支持。
观察的维度也比较多,主要体现在参数 advice 的数据结构上。Advice 参数最主要是封装了通知节点的所有信息。请参考表达式核心变量中关于该节点的描述。
特别说明:
- watch 命令定义了4个观察事件点,即 -b 方法调用前,-e 方法异常后,-s 方法返回后,-f 方法结束后
- 4个观察事件点 -b、-e、-s 默认关闭,-f 默认打开,当指定观察点被打开后,在相应事件点会对观察表达式进行求值并输出
- 这里要注意方法入参和方法出参的区别,有可能在中间被修改导致前后不一致,除了 -b 事件点 params 代表方法入参外,其余事件都代表方法出参
- 当使用 -b 时,由于观察事件点是在方法调用前,此时返回值或异常均不存在
- 在watch命令的结果里,会打印出location信息。location有三种可能值:AtEnter,AtExit,AtExceptionExit。对应函数入口,函数正常return,函数抛出异常。
tt 命令
com.mb.wife.controller.HiController#hi
INDEX TIMESTAMP COST(ms) IS-RET IS-EXP OBJECT CLASS METHOD
-----------------------------------------------------------------------------------------------------------------------
1000 2021-10-23 22:14:27 0.4527 true false 0x6fd97fd1 HiController hi
1001 2021-10-23 22:14:38 0.157701 true false 0x6fd97fd1 HiController hi
1002 2021-10-23 22:14:44 0.9488 true false 0x6fd97fd1 HiController hi
查看详情
tt -i 1000
重放 重做一次调用 这是一个很赞的功能!
tt -i 1000 -p
在线调试地址
当在本地启动时,可以访问 http://127.0.0.1:8563/ ,通过浏览器来使用Arthas。
reset
Arthas在 watch/trace 等命令时,实际上是修改了应用的字节码,插入增强的代码。显式执行 reset 命令,可以清除掉这些增强代码。
退出Arthas
用 exit 或者 quit 命令可以退出Arthas。
退出Arthas之后,还可以再次用 java -jar arthas-boot.jar 来连接。
彻底退出Arthas
exit/quit命令只是退出当前session,arthas server还在目标进程中运行。
想完全退出Arthas,可以执行 stop 命令。
以上是关于arthas常用命令的主要内容,如果未能解决你的问题,请参考以下文章