JVM监控及诊断工具GUI篇之Arthas(三):class、classloader相关指令
目录
一、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相关指令相关推荐
- 性能监控与调优篇之【3. JVM 监控及诊断工具-GUI 篇】
文章目录 3. JVM 监控及诊断工具-GUI 篇 3.1. 工具概述 3.2. JConsole 3.3. Visual VM 3.4. Eclipse MAT 3.5. JProfiler 3.6 ...
- JVM监控及诊断工具-GUI篇
3.JVM监控及诊断工具-GUI篇 一.工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系.各方 ...
- 20.JVM监控以及诊断工具-GUI篇
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 20. JVM监控及诊断工具-GUI篇 20.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相 ...
- 干货满满【JVM监控及诊断工具-GUI篇】
[JVM监控及诊断工具-GUI篇] 3.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系 ...
- JVM 学习笔记二十六、JVM监控及诊断工具-GUI篇
二十六.JVM监控及诊断工具-GUI篇 1.工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限: (1)无法获取方法级别的分析数据,如方法间的调用关系 ...
- 第24章 JVM监控及诊断工具-GUI篇
第24章 JVM监控及诊断工具-GUI篇 来自尚硅谷宋红康老师讲解的JVM:bilibili链接 1 工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局 ...
- 15、JVM监控及诊断工具-GUI篇
文章目录 第1章.工具概述 第2章.jConsole 1.基本概述 2.启动 3.三种连接方式 [1]Local [2]Remote [3]Advanced 4.主要作用 第3章.Visual VM ...
- JVM(二十二) -- 性能监控与调优(三) -- JVM监控及诊断工具--GUI篇
1.工具概述 1.1 图形化总和诊断工具: JDK自带的工具 第三方工具 2. jConsole(了解) 从java5开始,在JDK中自带的java监控和管理控制台. 用于对JVM中内存.线程和类等的 ...
- <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- Day357358359360.JVM监控及诊断工具-GUI -JVM
JVM监控及诊断工具-GUI 实际中,你下面有1-2款会用即可 一.工具概述 二.JConsole 了解 1.基本概述 2.启动 在jdk安装目录中找到jconsole.exe,双击该可执行文件就可以 ...
最新文章
- 保存数组类型数据_JS基本数据类型和引用数据类型的区别及深浅拷贝
- python 三步问题
- Phpmyadmin安装过程
- android 资源
- 类的 三大特性 封装,继承,多态 overload与override的区别
- coco creator编辑动画坑之拖图片
- Centos7 minmal 安装
- 怎样用计算机求成绩平均分,2017年计算机一级WPS辅导:WPS2007中求特定比例成绩的平均分...
- 32位的tetview and medit 在64bit的linux运行,有很多32bit的库没有安装,错误不断之解决办法。
- 关于PostThreadMessage以及创建线程消息队列
- MKS-DLC雕刻MKS_TFT_CNC字机器,CNC雕刻,激光雕刻GRBL使用方法
- 一个屌丝程序猿的人生(九十六)
- Vue笔记随笔---kalrry
- 电脑我的计算机硬盘刷新慢,事实:如果计算机硬盘的读取速度变得很慢该怎么办?...
- 对称密码体制与公钥密码体制
- Android之低功耗蓝牙的基本使用
- 苹果CMS v10模板 - JOEOEL模板/苹果CMS手机端模板
- 超实用:Vue 自定义指令合集
- 腾讯大数据之 TDW 计算引擎解析——Shuffle
- android11.0去掉锁屏和设置里充电剩余时间
热门文章
- mysql_query is deprecated_Function mysql_db_query() is deprecated 错误解决
- [PAT B1020] 月饼
- Zoox 的自动驾驶汽车方法
- 极客大学架构师训练营 秒杀 搜索引擎 爬虫 Lucene Elastic Search 第18课 听课总结
- fill()函数和fill_n()函数
- Nginx概述(1)----应用场景,出现原因,优点,组成
- javaweb:域对象的属性操作setAttribute(),getAttribute()及其作用范围
- oracle 7302,无法创建链接服务器XXXXX的OLEDB访问接口OraOLEDBOracle的实例。(MicrosoftSQLServer,错误7302)...
- java Relative Path and absolute
- 拟凸函数一阶条件的证明