Hello Jose,
well - to determine what's currently running in the JVM you can collect (a series of) Thread-Dumps (javacore's) for the JVM and then compare the running threads and check which are still the same over the series of collected dumps. Furthermore - depending on the JVM you are using - the javacore of the IBM JVM (at least on Linux / AIX) lists the CPU usage of the Thread. in the `3XMCPUTIME` record of the javacore,
This looks like:
3XMCPUTIME CPU usage total: 14.377890000 secs, user: 13.274572000 secs, system: 1.103318000 secs, current category="Application"
So you can find out - by comparing the CPU usage of each thread in each javacore - which threads consume lots of CPU and what their call-stack is. The IBM TMDA tool can assist you in comparing javacore files.
Additionally I'd recommend to check the verbose GC log files to determine if these high CPU usage is caused by heavy GC activity. The GCMV tool or the Eclipse plugin for GCMV can help you to determine ge GC behaviour at the time of the high CPU.
As a last resort you can open a case with IBM support and provide the respective Must-Gather documentation for "Performance, hang, or high CPU" whereby I don't see a section for iSeries there. So you might have to ask support for the required must-gather on iSeries.
Note: The IBM Support Assistant provides a suire of tools for problem analysis in case you want to check what other tools are available and probably helpful in your scenario.