Arthas 实战,助你解决同名类依赖冲突问题(下)

简介: 上篇文章『程序员需要了解依赖冲突的原因以及解决办法』中,阿粉分析 Maven 依赖冲突分为两类: 项目同一依赖应用,存在多版本,每个版本同一个类,可能存在差异。 项目不同依赖应用,存在包名,类名完全一样的类。 第二种情况,往往是这个场景,本地/测试环境运行的都是好好的,上线之后测试就是不行。这其实与 JVM 类加载有关,本地/测试环境加载正确类,而生产环境加载错的类,为什么会这样? 主要有两个原因: 同一个类只会被加载器加载一次 不同环境,类的加载顺序不同

使用 verbose:class 打印加载类

我们可以在 jvm 启动脚本加入如下参数 -verbose:class,然后重启,日志里会打印出每个类的加载信息。

1java -verbose:class -classpath './*' xx.xx.Main

日志输出如下:

50.jpg

通过这种方式可以看到加载类来源于哪个Jar包。

不过这种方式需要重启应用,对生产系统来说,影响还是比较大,不太优雅。

Arthas 查到来源类

阿里开源项目 Arthas  sc 命令可以用来查找加载类的信息。。

sc 命令是 Search-Class 简写,这个命令可以搜索出已经加载到 JVM 中的 Class 信息,支持参数如下表格所示。

51.jpg

使用方法非常简单,程序启动之后,启动 arthas,进入 A 应用。

运行如下命令:

1sc -d org.example.App

输出结果如下 :

52.jpg

code-source 显示当前查找类 org.example.App 来自的 C。

另外我们可以 jad 命令反编译类,在线查看源码。

53.jpg

总结

这篇文章主要解释应用中存在多个同名类的情况下,加载类不同的原因。接着介绍了两种快速查找运行应用依赖类来源的方法。

当定位到了冲突类的来源,我们可以显示使用 classpath 排列 jar 包顺序,指定类加载的顺序。但这只是暂时解决,本质依赖冲突的问题,还是深层次排除的。

相关文章
|
Arthas 监控 Java
开源Java诊断工具Arthas:开篇之watch实战
还在为排查Java程序线上问题头痛吗,看我们用阿里开源的诊断神器 Arthas 来帮您
624 1
|
Arthas Dubbo Java
Alibaba Java诊断工具Arthas查看Dubbo动态代理类
Alibaba Java诊断工具Arthas查看Dubbo动态代理类
137 0
|
9月前
|
Arthas Java 测试技术
Docker 环境中 Spring Boot 应用的 Arthas 故障排查与性能优化实战
Docker 环境中 Spring Boot 应用的 Arthas 故障排查与性能优化实战
|
Arthas 缓存 Java
Arthas 实战,助你解决同名类依赖冲突问题(上)
上篇文章『程序员需要了解依赖冲突的原因以及解决办法』中,阿粉分析 Maven 依赖冲突分为两类: 项目同一依赖应用,存在多版本,每个版本同一个类,可能存在差异。 项目不同依赖应用,存在包名,类名完全一样的类。 第二种情况,往往是这个场景,本地/测试环境运行的都是好好的,上线之后测试就是不行。这其实与 JVM 类加载有关,本地/测试环境加载正确类,而生产环境加载错的类,为什么会这样? 主要有两个原因: 同一个类只会被加载器加载一次 不同环境,类的加载顺序不同
Arthas 实战,助你解决同名类依赖冲突问题(上)
|
8月前
|
Arthas Java 测试技术
Arthas之动态加载类(retransform)
Arthas之动态加载类(retransform)
409 0
|
8月前
|
Arthas 测试技术
Arthas查看已加载类的源码(jad)
Arthas查看已加载类的源码(jad)
292 0
|
9月前
|
Arthas 监控 Java
金石原创 |【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康!
金石原创 |【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康!
121 0
|
Arthas JavaScript Java
Java 诊断工具 Arthas 常见命令(超详细实战教程)(一)
Java 诊断工具 Arthas 常见命令(超详细实战教程)(一)
Java 诊断工具 Arthas 常见命令(超详细实战教程)(一)
|
Arthas Java 测试技术
Java 诊断工具 Arthas 常见命令(超详细实战教程)(二)
Java 诊断工具 Arthas 常见命令(超详细实战教程)(二)
Java 诊断工具 Arthas 常见命令(超详细实战教程)(二)
|
Arthas 监控 数据可视化
实战!使用 阿里 Arthas 工具分析 CPU 飙高
实战!使用 阿里 Arthas 工具分析 CPU 飙高
实战!使用 阿里 Arthas 工具分析 CPU 飙高

热门文章

最新文章