Java 에이전트 jar 파일을 작성했습니다 (명령 행에서 완벽하게 작동합니다). 다음으로이 에이전트를 j2ee 서버의 실행중인 JVM에 연결하고 싶습니다. 그래서 나는 코드를 사용 :Java Agent jars를 코드에 동적으로 추가 한 후 Java Agent jars를 언로드하는 방법은 무엇입니까? Java 계측
public static void loadAgent() {
System.out.println("dynamically loading javaagent");
String nameOfRunningVM = ManagementFactory.getRuntimeMXBean().getName();
int p = nameOfRunningVM.indexOf('@');
String pid = nameOfRunningVM.substring(0, p);
try {
VirtualMachine vm = VirtualMachine.attach(pid);
String jarFilePath = vm.getSystemProperties().getProperty("java.home")+File.separator+"lib"+File.separator+"test-agent-7.jar";
vm.loadAgent(jarFilePath, "");
vm.detach();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
편집 :이 지금 일이고, 나는 호출되는 변압기를 볼 수 있어요. 나는 또한 변압기를 제거하고 변압기를 디버깅 할 수있었습니다.
내 질문은 :
- 어떻게 내가이 자바 에이전트 항아리를 언로드 않는 한 번 완성은?
- JVM을 종료/재시작하는 유일한 방법은 무엇입니까?
- 항아리가 메모리에 남아 있으면 영향을 줍니까? 에이전트를로드하는 경우
, 당신은 클래스를로드 :
@Tal 문제를 해결 했습니까? –
불행히도 ... 에이전트 jar가로드되어 있습니다 .. – Tal