Arthas 之查看类加载信息的相关命令
通过 Arthas 中的 trace/monitor/watch/stack/tt 等命令,可以查看方法内部调用信息,从而定位定位方法调用问题。
sc(已加载的类信息)
方法介绍
“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息。
官方文档:
https://arthas.aliyun.com/doc/sc.html
参数说明
使用 sc --help
获取 sc 命令的帮助信息:
[arthas@32344]$ sc -help
USAGE:
sc [-c <value>] [-d] [-x <value>] [-f] [-h] [-E] class-pattern
SUMMARY:
Search all the classes loaded by JVM
EXAMPLES:
sc -d org.apache.commons.lang.StringUtils
sc -d org/apache/commons/lang/StringUtils
sc -d *StringUtils
sc -d -f org.apache.commons.lang.StringUtils
sc -E org\\.apache\\.commons\\.lang\\.StringUtils
WIKI:
https://alibaba.github.io/arthas/sc
OPTIONS:
-c, --classloader <value> The hash code of the special class's classLoader
-d, --details Display the details of class
-x, --expand <value> Expand level of object (0 by default)
-f, --field Display all the member variables
-h, --help this help
-E, --regex Enable regular expression to match (wildcard matching by default)
<class-pattern> Class name pattern, use either '.' or '/' as separator
主要参数说明如下:
参数名称 | 参数说明 |
---|---|
class-pattern | 类名表达式匹配 |
method-pattern | 方法名表达式匹配 |
[d] | 输出当前类的详细信息,包括这个类所加载的原始文件来源、类的声明、加载的 ClassLoader 等详细信息。 如果一个类被多个 ClassLoader 所加载,则会出现多次 |
[E] | 开启正则表达式匹配,默认为通配符匹配 |
[f] | 输出当前类的成员变量信息(需要配合参数 - d 一起使用) |
[x:] | 指定输出静态变量时属性的遍历深度,默认为 0,即直接使用 toString 输出 |
[c:] |
指定 class 的 ClassLoader 的 hashcode |
[classLoaderClass:] |
指定执行表达式的 ClassLoader 的 class name |
[n:] |
具有详细信息的匹配类的最大数量(默认为 100) |
查看已加载的类信息
模糊搜索:
[arthas@32344]$ sc sample.*
sample.demo.ServerDemoApplication
sample.demo.ServerDemoApplication$$EnhancerBySpringCGLIB$$1a055512
sample.demo.controller.UserController
sample.demo.service.UserService
Affect(row-cnt:4) cost in 7 ms.
打印类的详细信息:
[arthas@32344]$ sc -d sample.demo.controller.UserController
class-info sample.demo.controller.UserController
code-source /C:/Codes/JavaWorkSpace/workspace48/arthas-demo/target/classes/
name sample.demo.controller.UserController
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name UserController
modifier public
annotation org.springframework.scheduling.annotation.EnableScheduling,org.springframework.web.bind.annotation.
RestController
interfaces
super-class +-java.lang.Object
class-loader +-sun.misc.Launcher$AppClassLoader@73d16e93
+-sun.misc.Launcher$ExtClassLoader@2752f6e2
classLoaderHash 73d16e93
Affect(row-cnt:1) cost in 19 ms.
打印出类的 Field 信息:
[arthas@32344]$ sc -d -f sample.demo.controller.UserController
class-info sample.demo.controller.UserController
code-source /C:/Codes/JavaWorkSpace/workspace48/arthas-demo/target/classes/
name sample.demo.controller.UserController
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name UserController
modifier public
annotation org.springframework.scheduling.annotation.EnableScheduling,org.springframework.web.bind.annotation.
RestController
interfaces
super-class +-java.lang.Object
class-loader +-sun.misc.Launcher$AppClassLoader@73d16e93
+-sun.misc.Launcher$ExtClassLoader@2752f6e2
classLoaderHash 73d16e93
fields name log
type org.slf4j.Logger
modifier final,private,static
value Logger[sample.demo.controller.UserController]
name userService
type sample.demo.service.UserService
modifier private
annotation org.springframework.beans.factory.annotation.Autowired
Affect(row-cnt:1) cost in 6 ms.
sm(已加载类的方法信息)
方法介绍
“Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。
官方文档:
https://arthas.aliyun.com/doc/sm.html
参数说明
使用 sm --help
获取 thread 命令的帮助信息:
[arthas@32344]$ sm --help
USAGE:
sm [-c <value>] [-d] [-h] [-E] class-pattern [method-pattern]
SUMMARY:
Search the method of classes loaded by JVM
EXAMPLES:
sm java.lang.String
sm -d org.apache.commons.lang.StringUtils
sm -d org/apache/commons/lang/StringUtils
sm *StringUtils *
sm -Ed org\\.apache\\.commons\\.lang\.StringUtils .*
WIKI:
https://alibaba.github.io/arthas/sm
OPTIONS:
-c, --classloader <value> The hash code of the special class's classLoader
-d, --details Display the details of method
-h, --help this help
-E, --regex Enable regular expression to match (wildcard matching by default)
<class-pattern> Class name pattern, use either '.' or '/' as separator
<method-pattern> Method name pattern
主要参数说明如下:
参数名称 | 参数说明 |
---|---|
class-pattern | 类名表达式匹配 |
method-pattern | 方法名表达式匹配 |
[d] | 展示每个方法的详细信息 |
[E] | 开启正则表达式匹配,默认为通配符匹配 |
[c:] |
指定 class 的 ClassLoader 的 hashcode |
[classLoaderClass:] |
指定执行表达式的 ClassLoader 的 class name |
[n:] |
具有详细信息的匹配类的最大数量(默认为 100) |
查看方法信息
展示类的所有方法:
[arthas@32344]$ sm sample.demo.controller.UserController
sample.demo.controller.UserController <init>()V
sample.demo.controller.UserController getUser(Ljava/lang/Integer;)Ljava/util/HashMap;
sample.demo.controller.UserController sample()V
Affect(row-cnt:3) cost in 33 ms.
展示方法的详细信息:
[arthas@32344]$ sm -d sample.demo.controller.UserController getUser
declaring-class sample.demo.controller.UserController
method-name getUser
modifier public
annotation org.springframework.web.bind.annotation.GetMapping
parameters java.lang.Integer
return java.util.HashMap
exceptions java.lang.Exception
classLoaderHash 73d16e93
Affect(row-cnt:1) cost in 4 ms.
相关文章