More for my own reference than anything else, a means to establish which java thread is using CPU time on Linux.

  1. Get the process ID (PID) using ps -ef
  2. Enter the command top -p<pid>
  3. Press shift-h
  4. All threads in the parent java process should start to appear with their lightweight process IDs and CPU usage - this takes some time
  5. Now send a kill -3 <pid> to the process - this will trigger a thread dump without ending the process. CTL-\ will also work if you have java running in a console.
  6. Convert the PIDs of the lightweight process you are interested in into hex (so 2042 = 0x7FA)
  7. Find the file where the Java process was sending system.out and grep for nid=<lightweight pid in hex>

Bingo, you should have the thread name and stack of the thread using up CPU time