Core dump equivalent for Java
Java does. If you are using an IBM VM, use com.ibm.jvm.Dump.SystemDump()
to programatically generate a dump. This can be debugged using a debugger. I believe "kill"ing your Java process should generate a system dump too. For Unix use kill -4 pid
where pid is the process id and could be queried by typing in top | grep java
if you have 1 VM instance running.
You could also add -Xdump:system
or -Xdump:heap
etc to your java command line to filter events and generate dumps on certain events like VM Stop (-Xdump:system:events=vmstop
), full garbage collections(-Xdump:system:events=fullgc
), etc. Note, depending on your heap size, generating a dump on a full GC is may not be a good idea (i.e you might create 50 dumps withing 20 seconds if you heap grows from 4M to around 60M in 20 seconds ) so you could add a counter like -Xdump:system:events=fullgc,range=50..55
which would generate 5 cores between the 50th to the 55th full garbage collect.
I've found relevant information in a Sun forum and in an SO discussion: I have not had much luck with it, but it might work in your case.
Note: some of the tools mentioned are Java tools, but are unsupported and are not available on Windows versions of the JDK.