java的attach机制,可以无侵入的动态加载一个agent jar而不需要目标应用进行任何预先配置
最近在使用实现一个动态诊断调试功能时,使用到了attach机制,在每个服务器上部署一个诊断服务,由诊断服务去attach目标应用,调用VirtualMachine.attach(pid) 方法。
在IDE上启动并调用attach方法没有任何问题,但是转到测试环境上就出现了问题:
Caused by: java.lang.NoClassDefFoundError: com/sun/tools/attach/VirtualMachine
at com.huoli.mj.diagnose.attach.AttachEntrance.attach(AttachEntrance.java:60) ~[classes!/:?]
at com.huoli.mj.diagnose.controller.AttachController.attachByPid(AttachController.java:85) ~[classes!/:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_131]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_131]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_131]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_131]
经过查找资料,找到解决方法:需要在发起attach的应用启动时加入一段参数
-Xbootclasspath/a:/usr/jdk1.8.0_121/lib/tools.jar
转载:"程序包com.sun.tools.attach不存在"最简单粗暴的解决方案最近在测试JavaAgent的Attach相关API,代码中有如下实现
打包编译的时候不断报错:程序包com.sun.tools.attach不存在
解决方案:pom中加入tool.jar外部依赖,指定本地系统中tool.jar路径
systemPath请自行更换为自己的Java目录...
学习类装入的工作方式以及 JVM 如何帮助找出类装入问题 Lakshmi Shankar, Java 技术中心开収团队, IBM Hursley 实验室 Simon Burns (simon_burns@uk.ibm.com), Java 技术中心开収团队, IBM Hursley 实验室 简介: 类装入组件是 Java™ 虚拟机的基础。虽然开収人员一般对类装入的基础有良好的掌握,但是当问题収生时,在诊断问题和确定解决方案方面可能迓要有一定的困难。在返仹由四部分组成的系列中,Lakshmi Shankar 和 Simon Burns 讨论了在 Java 开収中可能遇到的各种类装入问题,解释了它们为什么会収生和如何解决它们。他们提供的见解有助亍理解和解决常见的 Java 异常,例如 NoClassDefFoundError 和 ClassNotFoundException,以及更有挅戓性的问题,例如类装入器约束迗反和死锁。在第 1 部分中,他们详细描述了 Java 类装入的工作方式,讨论了 JVM 中可以帮助诊断类装入问题的工具。
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
// need delete in gradle3.x version
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
Module build
最近做项目遇到场景:通过前端提交的JAVA代码,创建java文件,然后再编译JAVA文件称class文件,
具体实现的细节,就不细说了,最后执行的结果能正常执行,但控制台报错:
Can't initialize javac processor due to (most likely) a class loader problem: java.lang.NoClassDefFoundError...
今天测试突然给我说我写的XX界面一点app就crash了!
纳尼,我肯定表示不服啊!怎么可能出现一点击就崩溃的情况呢,明明自己的测试了的!
然后我又用自己的测试机试了下没问题(Version:5.0.2),然后又使用crash的测试手机(Version:4.4),乖乖,居然是4.4才会出现的情况!(4.4以下没有验证哈!可能都会吧!!!)
log显示:
W/System.err: java.lang.NoClassDefFoundError: android/os/PersistableBundle
W/System.err: at java.lang.Class.getDeclar
1、项目依赖的jar包未全部导入;
如:java.lang.NoClassDefFoundError: Could not initialize class com.esms.common.util.XmlUtil,当你去查这个类的时候发现这个类是存在,之所以抱着个错是
因为在这个类里面的方法引用了其他jar包中的类的方法,而这个被引用的这个jar包刚好缺失,所以抛出这个错。
解决办法:一层
Sharding-jdbc设置defaultDatasource无效问题解决和源码分析思路
xiumuzi003: