2010-02-11 25 views
7

Recientemente aprendí sobre escenarios que requieren el calentamiento de una aplicación (con un alto requerimiento de rendimiento) antes de que comiencen a servir solicitudes reales. ¡La lógica detrás de esto era permitir que JIT hiciera su magia de rendimiento!Calentamiento de aplicaciones Java de alto rendimiento

¿Es esta una norma para las aplicaciones de Java o se hace generalmente para las aplicaciones de memoria pesada (huella)?

+1

La optimización del rendimiento se trata menos de "aprender sobre escenarios" que de medir y analizar lo que ocurre en ** tus ** escenarios específicos. – flybywire

+0

Vea también mi pregunta: http://stackoverflow.com/questions/1481853/technique-or-utility-to-minimize-java-warm-up-time – noahlz

Respuesta

11

Si está hablando de una aplicación web de alto tráfico/sitio web, JIT es un problema muy leve. El mayor problema es calentar (poblar) todas las capas de caché que necesitará tener. Por ejemplo, ehcache regions which are being populated from hibernate. Esto se debe a operaciones relacionadas IO son varios órdenes de magnitud más lento que todo lo que sucede dentro de la CPU (es decir a menos que esté fractales cálculo :)

+2

+1 para "a menos que esté calculando fractales". – z5h

+0

Gracias por el puntero, pero creo que me estaba refiriendo a rutas de códigos de calentamiento en lugar de datos "caros". Me preguntaba en particular si tiene sentido precalentar las aplicaciones de Java grandes, especialmente teniendo en cuenta que las JVM de hoy en día son lo suficientemente inteligentes como para decidir a qué ruta de acceso se accede mucho y almacenar el JIT, etc. Sin duda hay una perf. golpear cuando JITing por primera vez y por lo tanto, quería saber si en la vida real alguien se ha enfrentado a este problema que los habría animado a calentar sus aplicaciones y si es así, entonces ¿qué perf. mejoras han visto. –

+1

@Aayush Puri: y mi respuesta fue que si estás hablando de webapp, el calentamiento JIT es 0.01% importante, así que en la vida real (y en el contexto de webapps) todos tienen problemas más grandes para resolver (calentamiento de base de datos, cachés, etc.) – cherouvim

5

La pregunta es, ¿cuándo quieren salir de su camino para hacer esto ?

Si saca una aplicación web y está INMEDIATAMENTE activa, entonces mientras la "calienta", está agregando carga adicional, lo que es contraproducente. Similar es cierto cuando se inicia una aplicación de escritorio. No tiene sentido el calentamiento si el usuario va a comenzar a usarlo inmediatamente. O lo que es peor, no le permite al usuario interactuar mientras está calentando la aplicación.

Si despliega una aplicación web y prueba la implementación antes de apuntar sus balanceadores de carga hacia ella, entonces ya la habrá calentado como resultado secundario.

+0

Personalmente, _I_ haré un esfuerzo para hacer esto cuando realice pruebas de rendimiento. O cuando tengo un clúster y el calentamiento de una máquina antes de conectarlo al clúster no afecta a los usuarios. –

+0

Pero si su entorno de producción no tiene el beneficio del calentamiento, ¿por qué desearía sesgar los resultados de su prueba de rendimiento mediante el calentamiento en el entorno de prueba de rendimiento? – zkarthik

+0

Estoy totalmente de acuerdo en que tiene sentido calentar una aplicación antes de agregarla a su equilibrador de carga. –

4

Además de cherouvim's answer, puedo pensar en algunas otras cuestiones que requieren calentamiento:

  • Objetos de instancias (carga lenta, únicos, etc.);
  • Asignación de montón (si su Xms es más pequeño que su Xmx).

Imagino que el sistema operativo se sintoniza también con el comportamiento de una aplicación, por lo que las llamadas al sistema operativo también pueden verse afectadas por un período de calentamiento.

La mayoría de los anteriores (población de caché, inicialización de objetos) no son específicos de Java.

+0

+1: la población de SO de cachés de archivos puede ser un factor importante. – erickson

+0

> Asignación de montón (si su Xms es más pequeño que su Xmx). Buen punto. Y creo que es por eso que se dice que establece Xmx = Xms –

Cuestiones relacionadas