Alex,
The trick to finding the root cause of CPU issues is to correlate information from the operating system to that of the JVM. By that I mean, you typically have to leverage tools/commands at the operating system level to identify the thread ID, within the JVM process, that is taking up most of the CPU. You can then generate a thread dump from the JVM and use that ID to find the specific thread that is causing the issue. Please note that the thread ID may be represented differently, so you may have to convert from decimal to hex, for example, to find the correct thread.
For Windows operating systems, I have typically used Process Explorer (Process Explorer - Sysinternals | Microsoft Learn) for these types of tasks.
Having said this, in my professional experience, the root cause of most (not all) CPU issues related to webMethods tends to be insufficient memory allocation (i.e. the heap is not large enough). Similarly, it’s not uncommon to run into heap sizing issues during upgrades because of the significant changes in the underlying software but often also in the environment. For example, many customers use the opportunity to upgrade (or change) operating systems or to move from 32-bit to 64-bit architectures.
Given this, you may want to hook up visualVM to the JVM (or turn on GC logging as suggested here) to determine if the issue is memory. You could also just bump up the heap size and see if the problem goes away. If it turns out not to be memory-related and there’s a service behaving badly somewhere, then a profiler like the one suggested by Gerardo or Nibble Technologies’ Nanoscope (Nanoscope) could come in handy. Full disclosure: I work for Nibble Technologies. 
Percio
#webMethods#Integration-Server-and-ESB