1.SC 查看已加载的类信息
格式 SC class-pattern(可以使用通配符)
SC *TIP* 显示所有包含tip的类信息。
2.sm 查看已加载类的方法信息
格式 sm class-pattern(可以使用通配符)
3.tt 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
格式 tt option class method
-l:显示记录的信息
-t:记录类的方法的执行过程
-n num:指定你需要记录的次数
-i index:查看到index的详细信息
-s:检索调用信息
例子:-s 'method.name=="getTipList" '查找方法为getTipList的记录
-p:重新调用
--replay-times 指定 调用次数 通过
--replay-interval 指定多次调用间隔(单位ms, 默认1000ms)
例子:tt -i 1004 -p 重新调用 index 为1004的记录
表格字段 | 字段解释 |
---|---|
INDEX | 时间片段记录编号,每一个编号代表着一次调用,后续tt还有很多命令都是基于此编号指定记录操作,非常重要。 |
TIMESTAMP | 方法执行的本机时间,记录了这个时间片段所发生的本机时间 |
COST(ms) | 方法执行的耗时 |
IS-RET | 方法是否以正常返回的形式结束 |
IS-EXP | 方法是否以抛异常的形式结束 |
OBJECT | 执行对象的hashCode(),注意,曾经有人误认为是对象在JVM中的内存地址,但很遗憾他不是。但他能帮助你简单的标记当前执行方法的类实体 |
CLASS | 执行的类名 |
METHOD | 执行的方法名 |
dashboard 当前系统的实时数据面板
字段说明
表格字段 | 字段解释 |
---|---|
ID | Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应。 |
NAME | 线程名 |
GROUP | 线程组名 |
PRIORITY | 线程优先级, 1~10之间的数字,越大表示优先级越高 |
STATE | 线程的状态 |
CPU% | 线程消耗的cpu占比,采样100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。 |
TIME | 线程运行总时间,数据格式为分:秒 |
INTERRUPTED | 线程当前的中断位状态 |
DAEMON | 是否是daemon线程 |
4.thread 查看当前线程信息,查看线程的堆栈\
格式:thread option
id:查看id的线程信息
-n num: 查看最忙的num个线程
-b:找出当前阻塞其他线程的线程
-i:指定采样时间间隔
5.JVM 查看当前JVM信息
信息:
COUNT: JVM当前活跃的线程数
DAEMON-COUNT: JVM当前活跃的守护线程数
PEAK-COUNT: 从JVM启动开始曾经活着的最大线程数
STARTED-COUNT: 从JVM启动开始总共启动过的线程次数
DEADLOCK-COUNT: JVM当前死锁的线程数
MAX-FILE-DESCRIPTOR-COUNT:JVM进程最大可以打开的文件描述符数
OPEN-FILE-DESCRIPTOR-COUNT:JVM当前打开的文件描述符数
6.mc 内存编译器
7.redefine 加载外部的.class文件,redefine jvm已加载的类
更详细的文章可以参考 https://alibaba.github.io/arthas/quick-start.html