Si tiene una aplicación Java que consume CPU cuando no está haciendo nada, ¿cómo determina lo que está haciendo?

Estoy llamando a la API de Java de un proveedor, y en algunos servidores parece que la JVM entra en un bucle de sondeo de baja prioridad después de iniciar sesión en la API (CPU con 100% de uso). La misma aplicación en otros servidores no presenta este comportamiento. Esto sucede en WebSphere y Tomcat. El entorno es difícil de configurar, por lo que es difícil tratar de hacer algo como perfilar dentro de Eclipse.

¿Hay alguna forma de crear un perfil (o algún otro método de inspección) de una aplicación Java existente que se ejecute en Tomcat para averiguar qué métodos se están ejecutando mientras se encuentra en este tipo de estado de espera? La aplicación solo está ejecutando un método cuando se encuentra en este estado (método del proveedor). El proveedor no puede replicar el comportamiento (por supuesto).

Actualizar:

Usando JConsole pude determinar quién estaba corriendo y qué estaban haciendo. Tardé unas horas en averiguar por qué lo estaba haciendo. El problema terminó siendo que el API jar del proveedor que se estaba usando no coincidía exactamente con la configuración de la base de datos que estaba usando. De manera predeterminada, se habilitó el seguimiento y la supervisión del rendimiento en los servidores que tuvieron una ligera falta de coincidencia en la configuración. Usé un tarro diferente y todo está bien.

Así que gracias, Joshua, por tu respuesta. JConsole fue extremadamente fácil de configurar y usar para monitorear una aplicación existente.

@Cringe - Hice algunos experimentos con algunas de las opciones que sugirió. Tuve algunos problemas con la configuración de JProfiler, se ve bien (pero es caro). En adelante, seguí adelante y agregué el plugin Eclipse Profiler y estaré revisando los diferentes perfiladores de código abierto para comparar la funcionalidad.

Respuestas a la pregunta(8)

Su respuesta a la pregunta