java通过attach机制加载agent时报NoClassDefFoundError问题

版权声明:随便转, 记得给个链接过来哦 https://blog.csdn.net/wk52525/article/details/87972068

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wk52525/article/details/87972068