前言
现在有很多文章都在写ARTHAS
,其实笔者也看着文章各种学习。本篇文章,大家可以认为是笔者的“自私贴”,为了逼自己学会ARTHAS
,强行进行了博客搬运。
ARTHAS 进阶
reset
:重置增强过得类,shutdown
会重置所有的类。
reset
thread
:查看线程信息。
CPU占比: 进行一次采样,获得所有线程的cpu的使用时间(调用的是java.lang.management.ThreadMXBean#getThreadCpuTime这个接口),然后睡眠一段时间,默认100ms,可以通过-i参数指定,然后再采样一次,最后得出这段时间内各个线程消耗的cpu时间情况,最后算出百分比。 thread -n {int}:指定最忙的前N个线程并打印堆栈 thread:打印所有线程信息 thread {threadId}:特定线程信息 thread -b:找出阻塞其他线程的线程(目前仅支持
synchronized
,不支持Lock
) thread -n 3 -i 1000:指定采样时间(单位为毫秒)
jvm
:查看JVM信息,主要信息如下。有个概念需要说明下,文件描述符:内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。
RUNTIME
--------------------------------------------------------------------------------
MACHINE-NAME 417@tjtx145-53-78.58os.org
JVM-START-TIME 2019-08-08 12:10:28
MANAGEMENT-SPEC-VERSI 1.2
ON
SPEC-NAME Java Virtual Machine Specification
SPEC-VENDOR Oracle Corporation
SPEC-VERSION 1.7
VM-NAME Java HotSpot(TM) 64-Bit Server VM
VM-VENDOR Oracle Corporation
VM-VERSION 24.80-b11
INPUT-ARGUMENTS -Xms2g 启动参数
-Xmx2g
-Xmn1g
-Xss1024K
-XX:PermSize=512m
-XX:MaxPermSize=512m
---------------------------------------------------------------------------
THREAD
---------------------------------------------------------------------------
COUNT 90 当前活跃线程数
DAEMON-COUNT 58 JVM当前活跃的守护线程数
PEAK-COUNT 245 从JVM启动开始曾经活着的最大线程数
STARTED-COUNT 625 从JVM启动开始总共启动过的线程次数
DEADLOCK-COUNT 0 当前死锁的线程数
---------------------------------------------------------------------------
FILE-DESCRIPTOR
---------------------------------------------------------------------------
MAX-FILE-DESCRIPTOR-C 1048576 JVM进程最大可以打开的文件描述符数
OUNT
OPEN-FILE-DESCRIPTOR- 809 JVM当前打开的文件描述符数
COUNT
getstatic
查看类的静态属性。
getstatic {packageName}.{className} {staticFieldName}
@SingleJedisClient[
logger=@Log4jLoggerAdapter[org.slf4j.impl.Log4jLoggerAdapter(com.test.redis.client.SingleJedisClient)],
jedisPool=@JedisPool[redis.clients.jedis.JedisPool@1c28c989],
]
sc
查看已加载的类信息。
sc {packageName} 模糊查询 sc -d {packageName}.{className} 详细信息
class-info com.zacpark.test.EnterpriseTask
code-source /opt/service/zacpark/test-1.0.0.jar
name com.zacpark.test.EnterpriseTask
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name EnterpriseTask
modifier public
annotation
interfaces
super-class +-java.lang.Object
class-loader +-sun.misc.Launcher$AppClassLoader@b2929b2
+-sun.misc.Launcher$ExtClassLoader@3b706ad7
classLoaderHash b2929b2
sc -d -f {packageName}.{className} 除了详细信息,还有Fields
信息。
sm
查看已加载类的方法信息
sm {packageName}.{className} 查看已加载类的所有方法 sm -d {packageName}.{className} 查看每个方法的详细信息
declaring-class com.zacpark.test.task.CheckRegInfoTask
method-name access$000
modifier static
annotation
parameters
return com.google.common.util.concurrent.RateLimiter
exceptions
总结
本文对 Arthas
的基础使用,进行了梳理,其实是笔者的“自私学习笔记贴”。