目录

一、Arthas中class/classloader相关之sc指令

二、Arthas中class/classloader相关之sm指令

三、Arthas中class/classloader相关之jad指令

四、Arthas中class/classloader相关之mc指令

五、Arthas中class/classloader相关之classloader指令

六、Arthas中class/classloader相关之其他指令


一、Arthas中class/classloader相关之sc指令

  • sc :查看JVM已加载的类信息。“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息,这个命令支持的参数有 [d]、[E]、[f] 和 [x:]。
[arthas@9804]$ sc com.wsh.*
com.wsh.GCTest
Affect(row-cnt:1) cost in 67 ms.

sc -d :输出当前类的详细信息,包括这个类所加载的原始文件来源、类的声明、加载的Classloader等详细信息。如果一个类被多个Classloader所加载,则会出现多次。

[arthas@9804]$ sc -d com.wsh.GCTestclass-info        com.wsh.GCTestcode-source       /D:/workspace/rocketmq-demo/target/classes/name              com.wsh.GCTestisInterface       falseisAnnotation      falseisEnum            falseisAnonymousClass  falseisArray           falseisLocalClass      falseisMemberClass     falseisPrimitive       falseisSynthetic       falsesimple-name       GCTestmodifier          publicannotationinterfacessuper-class       +-java.lang.Objectclass-loader      +-sun.misc.Launcher$AppClassLoader@18b4aac2+-sun.misc.Launcher$ExtClassLoader@47abf5a8classLoaderHash   18b4aac2Affect(row-cnt:1) cost in 74 ms.

-E 开启正则表达式匹配,默认为通配符匹配;

-f 输出当前类的成员变量信息(需要配合参数-d一起使用);

[arthas@9804]$ sc -d -f com.wsh.GCTestclass-info        com.wsh.GCTestcode-source       /D:/workspace/rocketmq-demo/target/classes/name              com.wsh.GCTestisInterface       falseisAnnotation      falseisEnum            falseisAnonymousClass  falseisArray           falseisLocalClass      falseisMemberClass     falseisPrimitive       falseisSynthetic       falsesimple-name       GCTestmodifier          publicannotationinterfacessuper-class       +-java.lang.Objectclass-loader      +-sun.misc.Launcher$AppClassLoader@18b4aac2+-sun.misc.Launcher$ExtClassLoader@47abf5a8classLoaderHash   18b4aac2fieldsAffect(row-cnt:1) cost in 38 ms.

-X 指定输出静态变量时属性的遍历深度,默认为0,即直接使用toString输出;

二、Arthas中class/classloader相关之sm指令

sm :查看已加载类的方法信息,“Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。sm 命令只能看到由当前类所声明 (declaring) 的方法,父类则无法看到。

[arthas@9804]$ sm com.wsh.GCTest
com.wsh.GCTest <init>()V
com.wsh.GCTest main([Ljava/lang/String;)V
Affect(row-cnt:2) cost in 9 ms.

-d :展示每个方法的详细信息

[arthas@9804]$ sm -d com.wsh.GCTestdeclaring-class   com.wsh.GCTestconstructor-name  <init>modifier          publicannotationparametersexceptionsclassLoaderHash   18b4aac2declaring-class  com.wsh.GCTestmethod-name      mainmodifier         public,staticannotationparameters       java.lang.String[]return           voidexceptions       java.lang.ClassNotFoundExceptionclassLoaderHash  18b4aac2Affect(row-cnt:2) cost in 16 ms.[arthas@1476]$ sm java.lang.String toString
java.lang.String toString()Ljava/lang/String;
Affect(row-cnt:1) cost in 23 ms.
[arthas@1476]$ sm -d java.lang.String toStringdeclaring-class  java.lang.Stringmethod-name      toStringmodifier         publicannotationparametersreturn           java.lang.StringexceptionsclassLoaderHash  nullAffect(row-cnt:1) cost in 15 ms.

-E: 开启正则表达式匹配,默认为通配符匹配

三、Arthas中class/classloader相关之jad指令

jad :将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码,便于你理解业务逻辑;在 Arthas Console 上,反编译出来的源码是带语法高亮的,阅读更方便。当然,反编译出来的 java 代码可能会存在语法错误,但不影响你进行阅读理解。

[arthas@16288]$ jad com.wsh.GCTestClassLoader:
+-sun.misc.Launcher$AppClassLoader@18b4aac2+-sun.misc.Launcher$ExtClassLoader@2953a62aLocation:
/D:/workspace/rocketmq-demo/target/classes//** Decompiled with CFR.** Could not load the following classes:*  com.wsh.Stu*/package com.wsh;import com.wsh.Stu;import java.util.ArrayList;public class GCTest {public static void main(String[] args) {ArrayList<Stu> list = new ArrayList<Stu>();
/* 9*/         for (int i = 0; i < 10000; ++i) {Stu stu = new Stu();
/*11*/             list.add(stu);try {
/*13*/                 Thread.sleep(500L);
/*16*/                 continue;}catch (InterruptedException e) {
/*15*/                 e.printStackTrace();}}}}Affect(row-cnt:1) cost in 440 ms.

反编译时只显示源代码:默认情况下,反编译结果里会带有ClassLoader信息,通过--source-only选项,可以只打印源代码。方便和mc/retransform命令结合使用。

[arthas@16288]$ jad --source-only  com.wsh.GCTest/** Decompiled with CFR.** Could not load the following classes:*  com.wsh.Stu*/package com.wsh;import com.wsh.Stu;import java.util.ArrayList;public class GCTest {public static void main(String[] args) {ArrayList<Stu> list = new ArrayList<Stu>();
/* 9*/         for (int i = 0; i < 10000; ++i) {Stu stu = new Stu();
/*11*/             list.add(stu);try {
/*13*/                 Thread.sleep(500L);
/*16*/                 continue;}catch (InterruptedException e) {
/*15*/                 e.printStackTrace();}}}}

四、Arthas中class/classloader相关之mc指令

  • mc :Memory Compiler/内存编译器,编译.java文件生成.class;
mc /tmp/Test.java

五、Arthas中class/classloader相关之classloader指令

classloader:查看classloader的继承树,urts,类加载信息,使用classloader去getResource,打印出所有查找到的resources的url;

//按类加载类型查看统计信息
[arthas@19520]$ classloadername                                       numberOfInstances  loadedCountTotalBootstrapClassLoader                       1                  2696com.taobao.arthas.agent.ArthasClassloader  1                  1334sun.misc.Launcher$ExtClassLoader           1                  60sun.reflect.DelegatingClassLoader          15                 15sun.misc.Launcher$AppClassLoader           1                  7
Affect(row-cnt:5) cost in 15 ms.

-t :查看classloader的继承树

[arthas@19520]$ classloader -t
+-BootstrapClassLoader
+-sun.misc.Launcher$ExtClassLoader@61518ab1+-com.taobao.arthas.agent.ArthasClassloader@13fafb6c+-sun.misc.Launcher$AppClassLoader@18b4aac2
Affect(row-cnt:4) cost in 9 ms.

-l :按类加载实例查看统计信息

[arthas@19520]$ classloader -lname                                                loadedCount  hash      parentBootstrapClassLoader                                2714         null      nullcom.taobao.arthas.agent.ArthasClassloader@13fafb6c  1347         13fafb6c  sun.misc.Launcher$ExtClassLoader@61518ab1sun.misc.Launcher$AppClassLoader@18b4aac2           7            18b4aac2  sun.misc.Launcher$ExtClassLoader@61518ab1sun.misc.Launcher$ExtClassLoader@61518ab1           60           61518ab1  null
Affect(row-cnt:4) cost in 6 ms.

-c :用classloader对应的hashcode来查看对应的 Jar urls

//使用sun.misc.Launcher$ExtClassLoader@61518ab1类加载器对应的hashcode来查看对应的 Jar urls
[arthas@19520]$ classloader -c 61518ab1
file:/C:/Program%20Files/Java/jdk1.8.0_291/jre/lib/ext/access-bridge-64.jar
file:/C:/Program%20Files/Java/jdk1.8.0_291/jre/lib/ext/cldrdata.jar
file:/C:/Program%20Files/Java/jdk1.8.0_291/jre/lib/ext/dnsns.jar
file:/C:/Program%20Files/Java/jdk1.8.0_291/jre/lib/ext/jaccess.jar
file:/C:/Program%20Files/Java/jdk1.8.0_291/jre/lib/ext/jfxrt.jar
file:/C:/Program%20Files/Java/jdk1.8.0_291/jre/lib/ext/localedata.jar
file:/C:/Program%20Files/Java/jdk1.8.0_291/jre/lib/ext/nashorn.jar
file:/C:/Program%20Files/Java/jdk1.8.0_291/jre/lib/ext/sunec.jar
file:/C:/Program%20Files/Java/jdk1.8.0_291/jre/lib/ext/sunjce_provider.jar
file:/C:/Program%20Files/Java/jdk1.8.0_291/jre/lib/ext/sunmscapi.jar
file:/C:/Program%20Files/Java/jdk1.8.0_291/jre/lib/ext/sunpkcs11.jar
file:/C:/Program%20Files/Java/jdk1.8.0_291/jre/lib/ext/zipfs.jarAffect(row-cnt:24) cost in 3 ms.

六、Arthas中class/classloader相关之其他指令

  • redefine:加载外部的.class文件,redefine到JVM里;
  • retransform:加载外部的.class文件, retransform到JVM里;
  • dump:dump已加载类的byte code到特定目录;

JVM监控及诊断工具GUI篇之Arthas(三):class、classloader相关指令相关推荐

  1. 性能监控与调优篇之【3. JVM 监控及诊断工具-GUI 篇】

    文章目录 3. JVM 监控及诊断工具-GUI 篇 3.1. 工具概述 3.2. JConsole 3.3. Visual VM 3.4. Eclipse MAT 3.5. JProfiler 3.6 ...

  2. JVM监控及诊断工具-GUI篇

    3.JVM监控及诊断工具-GUI篇 一.工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系.各方 ...

  3. 20.JVM监控以及诊断工具-GUI篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 20. JVM监控及诊断工具-GUI篇 20.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相 ...

  4. 干货满满【JVM监控及诊断工具-GUI篇】

    [JVM监控及诊断工具-GUI篇] 3.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系 ...

  5. JVM 学习笔记二十六、JVM监控及诊断工具-GUI篇

    二十六.JVM监控及诊断工具-GUI篇 1.工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限: (1)无法获取方法级别的分析数据,如方法间的调用关系 ...

  6. 第24章 JVM监控及诊断工具-GUI篇

    第24章 JVM监控及诊断工具-GUI篇 来自尚硅谷宋红康老师讲解的JVM:bilibili链接 1 工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局 ...

  7. 15、JVM监控及诊断工具-GUI篇

    文章目录 第1章.工具概述 第2章.jConsole 1.基本概述 2.启动 3.三种连接方式 [1]Local [2]Remote [3]Advanced 4.主要作用 第3章.Visual VM ...

  8. JVM(二十二) -- 性能监控与调优(三) -- JVM监控及诊断工具--GUI篇

    1.工具概述 1.1 图形化总和诊断工具: JDK自带的工具 第三方工具 2. jConsole(了解) 从java5开始,在JDK中自带的java监控和管理控制台. 用于对JVM中内存.线程和类等的 ...

  9. <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  10. Day357358359360.JVM监控及诊断工具-GUI -JVM

    JVM监控及诊断工具-GUI 实际中,你下面有1-2款会用即可 一.工具概述 二.JConsole 了解 1.基本概述 2.启动 在jdk安装目录中找到jconsole.exe,双击该可执行文件就可以 ...

最新文章

  1. 保存数组类型数据_JS基本数据类型和引用数据类型的区别及深浅拷贝
  2. python 三步问题
  3. Phpmyadmin安装过程
  4. android 资源
  5. 类的 三大特性 封装,继承,多态 overload与override的区别
  6. coco creator编辑动画坑之拖图片
  7. Centos7 minmal 安装
  8. 怎样用计算机求成绩平均分,2017年计算机一级WPS辅导:WPS2007中求特定比例成绩的平均分...
  9. 32位的tetview and medit 在64bit的linux运行,有很多32bit的库没有安装,错误不断之解决办法。
  10. 关于PostThreadMessage以及创建线程消息队列
  11. MKS-DLC雕刻MKS_TFT_CNC字机器,CNC雕刻,激光雕刻GRBL使用方法
  12. 一个屌丝程序猿的人生(九十六)
  13. Vue笔记随笔---kalrry
  14. 电脑我的计算机硬盘刷新慢,事实:如果计算机硬盘的读取速度变得很慢该怎么办?...
  15. 对称密码体制与公钥密码体制
  16. Android之低功耗蓝牙的基本使用
  17. 苹果CMS v10模板 - JOEOEL模板/苹果CMS手机端模板
  18. 超实用:Vue 自定义指令合集
  19. 腾讯大数据之 TDW 计算引擎解析——Shuffle
  20. android11.0去掉锁屏和设置里充电剩余时间

热门文章

  1. mysql_query is deprecated_Function mysql_db_query() is deprecated 错误解决
  2. [PAT B1020] 月饼
  3. Zoox 的自动驾驶汽车方法
  4. 极客大学架构师训练营 秒杀 搜索引擎 爬虫 Lucene Elastic Search 第18课 听课总结
  5. fill()函数和fill_n()函数
  6. Nginx概述(1)----应用场景,出现原因,优点,组成
  7. javaweb:域对象的属性操作setAttribute(),getAttribute()及其作用范围
  8. oracle 7302,无法创建链接服务器XXXXX的OLEDB访问接口OraOLEDBOracle的实例。(MicrosoftSQLServer,错误7302)...
  9. java Relative Path and absolute
  10. 拟凸函数一阶条件的证明