How can I add a Javaagent to a JVM without stopping the JVM?

后端 未结 4 710
猫巷女王i
猫巷女王i 2020-11-30 11:08

I wish to profile a Java application without stopping the application. Can I add a Javaagent somehow while the application is running?

4条回答
  •  野性不改
    2020-11-30 11:53

    See Starting a Java agent after program start.

    It links to http://dhruba.name/2010/02/07/creation-dynamic-loading-and-instrumentation-with-javaagents/ that under "Dynamic loading of a javaagent at runtime" provides working example:

    public static void loadAgent() throws Exception {
        String nameOfRunningVM = ManagementFactory.getRuntimeMXBean().getName();
        String pid = nameOfRunningVM.substring(0, nameOfRunningVM.indexOf('@'));
        VirtualMachine vm = VirtualMachine.attach(pid);
        vm.loadAgent(jarFilePath, "");
        vm.detach();
    }
    

    Note that Java 9 requires -Djdk.attach.allowAttachSelf=true to be present among JVM startup arguments.

提交回复
热议问题