开发者学堂课程【线上问题排查利器 Alibaba Arthas(下):class 和 Classloader 相关命令:dump】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/747/detail/13199
class 和 Classloader 相关命令:dump
内容介绍
一、dump作用及参数
二、举例运算
三、小节
一、作用及参数
接下来介绍第一条命令,与类相关的,dump 这个词翻译过来就是仓库的意思,意思则是,把现在运行的类进行进一步的储存,存在本地硬盘.
作用是将已加载类的字节码文件保存到特定目录:logs/arthas/classdump/实际上指将现在运行的类,将文件提取出来,存到本地的硬盘上面
之后就可以在这个目录下找到文件
参数
数名称 |
参数说明 |
class-pattem |
类名表达式匹配 |
[c:] |
可以指定类所属ClassLoader的hashcode |
[E] |
[A]开启正则表达式匹配,默认为通配符匹配 |
很多命令都使用[E]来进行匹配表达
二、举两个例子来说明存储问题
1.假设 Java,按string类,首先可以把它的字节码文件给它存下来。那可以先看一下一个目录,显示log时候,先进到log路线。然后里面有个class,那这时候把这里面的一些东西全部删了,先不要使文件里不要有任何的东西。
把这两步给它给删掉,这个目录现在空了,过一分钟就又会有新的东西出来。现在想把 java 给删掉,字节码文件提取出来,保存在刚刚的那个目录下面。显示如下
保存的路径在这个目录,那就是刚刚删掉的一个文件夹下面。现在就可以在这边来看一下,显示java,那再进到java里面。在这时就可以看到这个简化了,这个class文件提取出来放在这个地方了,还获取到了码文件。
再回到上面,就会了解,在加法当中,这个包其实就是文件夹,所以它是由三级目录组成。
此时便是需要的文件夹
把 String 类的字节码文件保存到-/logs/arthas/classdmp/目录下
dump Java.lang.String
把demo包下所有的类的字节码文件保存到-/1ogs/arthas/classdunp/目录下
dump demo.
首先先进到logs 盘然后就能实行Java string的运算
代码运算结果如下
Last login:Fri Har 20 14:28:43 2020 froe 192.168.254.1
[root@heima~]# cd.arthas/lib/3.1.7/arthas/
[root@heima arthas]#cd 1
[root@heina-]# 1s
anaconda-ks.cfg arthas-output bbb Hello.class logs mydate.log HyToncat.java
arthas-boot.jar arthas-packaging-3.1.7-bin.zip deno Hello.java RathGare.java my-demo.jor
root@heima ~]# cd logs/
root@heima logs]# 1s
rthas arthas-cache
[root@heima logs]# cd arthas
[root@heima arthas]# 1s
arthas.log arthas.log.2020-03-19.0 classdunp
[root@heima arthas]# cd classdump
[root@heima classdump]# 1s
把代码存在刚刚的目录下面
此时,便可以显示classloader 的字样
保存的路径可
2.运行新的 Java。
可以用stick。如果使用通配符的话,这就意味着可以取这个包下面所有的类。那有时候有些包里面类特别多,这时就可以用通配符一次性的去除所有的类文件,这个就比较容易。此时,就比较清晰的可以看到,那加载器以及内加载器是哪一个?提取出来以后放在哪个目录下面呢?建一个类加载器为名字的。这就是一个文件夹,然后一个短横,后面会建立起新的文件夹。
root@heina classdunp]# 1s
java
[raot@heima classdunp]= ed java
[root@heima java]: is
lang
[root@heima java]" cd lang/
[root@heima lang)= is
string.class
[root@heima lang]" cd..
root@heina java)= cd ..
[root@heina classdump]# 1s
Java
[root@heima classdump]= |
此时的类清晰可见
三、小节
通过上面两个例子,可以了解到dump的作用,此时通过 dump 可以了解更多
dump 作用:将正在 JVM 空运行的程序的字节码文件提取出来,保存在 logs 相应的目录下,不同的类加载器放在不同的目录下。