在服务器中使用
一行命令快速启动
curl -O https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar
使用 arthas 查看是否存在某个类: sc -d 全限定类名 sc -d com.xxx.demo.service.UserService 这条命令的含义是:查找当前 JVM 中是否加载了指定类,并打印该类的详细信息(-d 代表 detail)。
- sc: search class,查询类加载器中加载的类。
- -d: 输出详细信息(如类加载器、代码来源 JAR 路径等)。
[arthas@16]$ sc -d com.iac.cpp.config.flow.deploy.DemandManageDeployService
class-info com.iac.cpp.config.flow.deploy.DemandManageDeployService
code-source file:/home/admin/release/new/iac-executable.jar!/BOOT-INF/lib/iac-cpp-config-1.0-SNAPSHOT.jar!/
name com.iac.cpp.config.flow.deploy.DemandManageDeployService
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name DemandManageDeployService
modifier public
annotation org.springframework.stereotype.Service
interfaces
super-class +-com.trustlife.common.config.deploy.BaseConfDeployService
+-java.lang.Object
class-loader +-org.springframework.boot.loader.LaunchedURLClassLoader@6b884d57
+-sun.misc.Launcher$AppClassLoader@70dea4e
+-sun.misc.Launcher$ExtClassLoader@78411116
classLoaderHash 6b884d57
Affect(row-cnt:1) cost in 334 ms.
这句 Arthas 命令:
sc -d com.iac.cpp.config.flow.deploy.DemandManageDeployService
的作用是:查找当前 JVM 中是否加载了指定类,并打印该类的详细信息(-d 代表 detail)。
✅ 解析结果详解:
[arthas@16]$ sc -d com.iac.cpp.config.flow.deploy.DemandManageDeployService
你执行了查询这个类是否被加载。
✅ 找到了目标类:
class-info com.iac.cpp.config.flow.deploy.DemandManageDeployService
说明类已经被加载进 JVM。
✅ 类的来源:
code-source file:/home/admin/release/new/iac-executable.jar!/BOOT-INF/lib/iac-cpp-config-1.0-SNAPSHOT.jar!/
这个类是从 iac-executable.jar 包中的 iac-cpp-config-1.0-SNAPSHOT.jar 这个内嵌 JAR 里加载出来的。
这常见于 Spring Boot fat jar(可执行 JAR) 打包方式。
✅ 类的结构信息:
name com.iac.cpp.config.flow.deploy.DemandManageDeployService
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
这些表示它是一个正常的 Java 类,不是接口、注解、枚举或匿名类。
✅ 类修饰信息:
simple-name DemandManageDeployService
modifier public
这是一个 public 修饰的类。
✅ 注解信息:
annotation org.springframework.stereotype.Service
它被 @Service 注解,说明这是一个 Spring 容器中的服务类。
✅ 实现结构(继承链):
super-class +-com.trustlife.common.config.deploy.BaseConfDeployService
+-java.lang.Object
说明它是继承自一个自定义父类 BaseConfDeployService。
✅ 类加载器信息:
class-loader +-org.springframework.boot.loader.LaunchedURLClassLoader@6b884d57
+-sun.misc.Launcher$AppClassLoader@70dea4e
+-sun.misc.Launcher$ExtClassLoader@78411116
classLoaderHash 6b884d57
说明这个类是被 Spring Boot 特有的类加载器加载的,即 LaunchedURLClassLoader,并且类加载器 hash 是 6b884d57。
这个信息对于你在 Arthas 中执行如 jad、watch、monitor、tt 命令非常重要,因为有些命令需要你提供 –classLoaderHash 来锁定类加载器。
✅ 结尾提示:
Affect(row-cnt:1) cost in 334 ms.
表示这个命令查到了 1 个类,耗时 334 毫秒。
✅ 后续你可以干嘛?
你现在知道类已加载,可以做这些操作:
目标 命令
查看源码 jad com.iac.cpp.config.flow.deploy.DemandManageDeployService
查看某方法调用参数 watch com.iac.cpp.config.flow.deploy.DemandManageDeployService 方法名 ‘{params, returnObj}’
跟踪方法执行路径 trace com.iac.cpp.config.flow.deploy.DemandManageDeployService 方法名
查看方法执行时间 monitor com.iac.cpp.config.flow.deploy.DemandManageDeployService 方法名
执行 OGNL ognl ‘@com.iac.cpp.config.flow.deploy.DemandManageDeployService@yourStaticMethod()’(如果是静态方法)
评论