推荐一个生产环境问题排查利器( 四 )

(8)Thread查看当前线程信息,查看线程的堆栈 。
参数说明:
id 线程id[n:] 指定最忙的前N个线程并打印堆栈[b] 找出当前阻塞其他线程的线程[i <value>] 指定cpu占比统计的采样间隔,单位为毫秒1、一键展示当前最忙的前n个线程并打印堆栈 。
thread -n 32、不带参数时,显示所有线程的信息
3、显示指定线程的运行堆栈
therad id4、找出当前阻塞其他线程的线程
thread -b目前只支持找出synchronized关键字阻塞住的线程,如果是java.util.concurrent.Lock,目前还不支持
5、指定采样时间间隔
thread -i 时间例如:thread -n 3 -i 1000
(9)jvm查看当前JVM信息
信息说明:
THREAD相关COUNT: JVM当前活跃的线程数DAEMON-COUNT: JVM当前活跃的守护线程数PEAK-COUNT: 从JVM启动开始曾经活着的最大线程数STARTED-COUNT: 从JVM启动开始总共启动过的线程次数DEADLOCK-COUNT: JVM当前死锁的线程数文件描述符相关MAX-FILE-DESCRIPTOR-COUNT:JVM进程最大可以打开的文件描述符数OPEN-FILE-DESCRIPTOR-COUNT:JVM当前打开的文件描述符数(10)sysprop查看当前jvm的系统属性(system property)
1、查看所有属性
sysprop2、查看某个属性
sysprop java.version3、修改某个属性值
sysprop key value(11)sysenv查看当前jvm的环境属性(system environment variables)
1、查看所有环境变量
sysenv2、查看单个环境变量
sysenv USER(12)getstatic可以查看类的静态属性
getstatic class_name field_name如果该静态属性是一个复杂对象,还可以支持在该属性上通过ognl表示进行遍历,过滤,访问对象的内部属性等操作 。
例如,假设n是一个Map,Map的Key是一个Enum,我们想过滤出Map中Key为某个Enum的值,可以写如下命令
$ getstatic com.alibaba.arthas.Test n 'entrySet().iterator.{? #this.key.name()=="STOP"}'field: n@ArrayList[    @Node[STOP=bbb],](13)ognl执行ognl表达式
参数说明:
express 执行的表达式[c:] 执行表达式的 ClassLoader 的 hashcode,默认值是SystemClassLoader[x]     结果对象的展开层次,默认值11、调用静态函数
ognl '@java.lang.System@out.println("hello")'2、获取静态类的静态字段
ognl '@demo.MathGame@random'3、执行多行表达式,赋值给临时变量,返回一个list
$ ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'@ArrayList[    @String[/opt/java/8.0.181-zulu/jre],    @String[OpenJDK Runtime Environment],](14)dumpdump已加载类的bytecode到特定目录
参数说明:
class-pattern 类名表达式匹配[c:] 类所属 ClassLoader 的 hashcode[E] 开启正则表达式匹配,默认为通配符匹配(15)classloader查看classloader的继承树,urls,类加载信息
classloader 命令将 JVM 中所有的classloader的信息统计出来,并可以展示继承树,urls等 。
可以让指定的classloader去getResources,打印出所有查找到的resources的url 。对于ResourceNotFoundException比较有用 。
参数说明:
参数名称 参数说明[l] 按类加载实例进行统计[t] 打印所有ClassLoader的继承树[a] 列出所有ClassLoader加载的类,请谨慎使用[c:] ClassLoader的hashcode[c: r:] 用ClassLoader去查找resource1、按类加载类型查看统计信息
classloader2、按类加载实例查看统计信息
classloader -l3、查看ClassLoader的继承树
classloader -t4、查看URLClassLoader实际的urls
classloader -c 5ffe97755、使用ClassLoader去查找resource
【推荐一个生产环境问题排查利器】$ classloader -c 226b143b -r META-INF/MANIFEST.MF6、 查找类的class文件:
$ classloader -c 1b6d3586 -r java/lang/String.class(16)redefine加载外部的.class文件,redefine jvm已加载的类 。


推荐阅读