I've build a command-line tool in Java, which I would now like to profile with YourKit. I launch the command-line tool with something like:
$ java -classpath .:foo.bar.jar com.foobar.tools.TheTool arg1 arg2 arg3
It runs to completion in less than 2 seconds.
After reading http://www.yourkit.com/docs/80/help/agent.jsp, I tried the following:
$ java -agentpath:/home/dspitzer/yjp-8.0.24/bin/linux-x86-32/libyjpagent.so -classpath .:foo.bar.jar com.foobar.tools.TheTool arg1 arg2 arg3
...and I get:
[YourKit Java Profiler 8.0.24] JVMTI version 3001016d; 14.3-b01; Sun Microsystems Inc.; mixed mode, sharing; Linux; 32-bit JVM
[YourKit Java Profiler 8.0.24] Profiler agent is listening on port 10001...
[YourKit Java Profiler 8.0.24] *** HINT ***: To get profiling results, connect to the application from the profiler UI
...
(And then the tool runs to completion and exits.)
I guess (by default, at least) YourKit is designed to only connect to running application.
How should I modify my command-line tool to allow connection from YourKit?
- I could add a command-line option that will have it pause for input, and I won't press return for it to continue until I've connected to it from YourKit.
- Is there a YourKit API that I could add to my tool that would cause it to block until I've connected with YourKit?
- Is there a YourKit API or a java command-line option that would create a profiling "snapshot" that I could load and analyze later (after the command-line tool has completed) with YourKit?
jdb -attach 8000
to connect to the debug port, and then "run" (inside jdb) to trigger the VM to continue execution. – Decrescent