Thread Pools
The ActiveMatrix BPM application contains a number of different thread pools that perform different functions within the BPM system.
Apart from the Process Engine (PVM) thread pool, which can be configured individually, each thread pool is configured collectively with a minimum and maximum number of threads by setting the amx.bpm.userapp.threadpool in the Thread Pool resource template. In general all the thread pools serve to limit the number of threads for EMS messages to a level that the system can handle comfortably. In many cases, the default values used by the system as delivered will prove to be satisfactory.
Depending on the system work load, sometimes too many of these threads are running and using excessive CPU and memory. However, most of the time, the number of these threads running in parallel is quite low. You can view these threads in a thread dump of the JVM (jstack) or through JConsole or JVisualVM.
Note that these threads also consume database connections, so these threads could exceed the maximum number of configured database connections, especially when taking into account the HTTP connector threads running.