2011-05-08 16 views
6

Hice un perfil de mi código con JProfiler y YourKit. Sin embargo, no he podido averiguar cómo detectar qué parte del código es responsable de la alta carga de la CPU.Perfilado de Java: detectar qué pieza de código provoca una carga de CPU elevada

Es trivial detectar puntos calientes si el tiempo de respuesta es malo. En mi caso, el tiempo de respuesta no es un problema. Es solo que la carga de la CPU es realmente alta (sorprendentemente alta) durante el poco tiempo que se procesa esta solicitud en particular.

¿Cómo puedo señalar qué clase (s)/método (s) están causando esto? Creo que lo que estoy buscando es algún tipo de lista que me diga cuántos ciclos de CPU requiere el procesamiento de un método, o eso.

+1

Puntos calientes del método sería donde me gustaría mirar. ¿Hay alguna razón por la que no creas este resultado? Cuando se realiza una solicitud, ¿no esperaría que la CPU esté al 100% (o al menos un núcleo completo)? –

+0

Sí, por supuesto, tienes razón. La medición del número de ciclos de CPU y el tiempo de ejecución de medición están directamente relacionados como [tiempo de ejecución = (número de ciclos * tiempo por ciclo) + espera de E/S y similares]. –

Respuesta

5

La carga de la CPU básicamente indica el número de ciclos de la CPU donde la CPU tenía algo que hacer en lugar de simplemente mover los pulgares virtuales.

Así que si su solicitud realmente funciona (en lugar de esperar E/S de disco), entonces es de esperar que la carga sea alta mientras se realiza el trabajo, ya que la CPU tiene algo que hacer.

Lo que necesita buscar se está quedando sin ciclos de CPU ya que es cuando los tiempos de respuesta comienzan a subir.

Si su problema aquí es que la solicitud es tan breve que el generador de perfiles no puede mostrarle lo que necesita ver, considere usar una herramienta automatizada para solicitar que procese cientos de miles de solicitudes. Esto debería ayudar.

+1

"en lugar de simplemente pulgares virtuales" :) +1 – Eugene

1

Mientras se procesa, está al 100%. Mientras está esperando (como para E/S) está en 0%. No hay término medio. Cuando un proceso toma menos del 100%, es un promedio móvil durante los últimos N milisegundos.

Si hay una manera de hacerlo más eficiente, eso hará que tome menos tiempo, no menos por ciento (necesariamente).

Si desea encontrar una manera de hacerlo tomar menos tiempo, de la suficiente carga de trabajo y try this.

Cuestiones relacionadas