I wish to profile a Java application without stopping the application. Can I add a Javaagent somehow while the application is running?
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.
-Djdk.attach.allowAttachSelf=true
2.1m questions
2.1m answers
60 comments
57.0k users