Header Ads Widget

Ticker

6/recent/ticker-posts

Apache Camel 3.8 y Java Flight Recorder

 En la próxima versión de Apache Camel 3.8, tenemos un nuevo componente Camel para integrar con Java Flight Recorder.

Camel ahora es capaz de capturar "pasos de trabajo" durante el inicio que se pueden grabar con Java Flight Recorder. Esto se puede usar para diagnosticar mejor y encontrar dónde sus aplicaciones Camel pueden tardar en iniciarse, por ejemplo, debido a un componente que no funciona bien o un código de usuario personalizado.

La siguiente captura de pantalla muestra una grabación que ha capturado una aplicación Camel que tarda unos 3 segundos en iniciarse. Es una aplicación muy pequeña, por lo que esperábamos que fuera más rápida. 

Si ordenamos los eventos por duración en el control de la misión JDK, podemos ver que hay 4 eventos que toman más de 2 segundos.

La secuencia es una secuencia del siguiente paso (subpaso):

Inicializando contexto -> Inicializando rutas -> Creando ruta (ruta2) -> Creando procesador Bean (bean1)

Lo que podemos ver es que el paso con mayor profundidad es "Crear procesador Bean", que tarda unos 2 segundos. Este es el culpable del cuello de botella.

Si verificamos la ruta Camel para saber dónde está en uso bean1, está en route2 en:

        de (“directo: lento”)
            .a (“log: lento? nivel = APAGADO”)
            .bean (MyBean.class, “hola”);

Aquí podemos ver que el bean está usando la clase MyBean, que luego podemos ver a continuación:

    public MyBean () {

        // forzar inicio lento

        tratar {

            LOG.warn ("Forzando un retraso de 2 segundos para que el inicio sea lento");

            Thread.sleep (2000);

        } captura (Excepción e) {

            // ignorar

        }

    }

Ah, está bien, aquí está el problema. El frijol duerme durante 2 segundos. Sí, por supuesto, este es un ejemplo inventado, pero afecta la grabación y nos permite encontrarlo a través de la herramienta de control de misión JDK.

También ofrecemos una grabadora de registros en la que puede "ver" parte de la misma información que en el control de misión JDK. Sin embargo, al usar el control de misión JDK, tiene la grabación JFR completa que también captura mucha información de JVM sobre el uso de la CPU y la memoria y todo eso.

Para usar Java Flight Recorder con Camel, todo lo que tiene que hacer es agregar camel-jfr en la ruta de clases. Entonces Camel lo detectará automáticamente y lo habilitará. Puede configurar la grabadora con varias opciones que se documentarán como parte de las opciones comunes .

Pero para encontrar rápidamente los cuellos de botella en el inicio de las aplicaciones Camel, la grabadora de registros es un buen comienzo. La captura de pantalla siguiente muestra la salida del registro y, como puede ver en el cuadro rojo, hemos identificado dónde está el problema de los "2 segundos".

La grabadora de registro viene de fábrica en camel-core, y puede usarla configurando:

camel.main.startup-recorder = registro

Si está utilizando Camel Main, Camel Quarkus, etc. Y para Spring Boot, puede habilitarlo con

camel.springboot.startup-recorder = registro

También puede configurar una grabadora personalizada o una de las implementaciones listas para usar a través del código Java:

camelContext.adapt (ExtendedCamelContext.class)
  .setStartupStepRecorder (…);

Puede probar este ejemplo ( camel-example-flight-recorder ) del repositorio de git de Camel Examples. Desde la línea de comando puede ejecutar 

mvn camel: correr

Y Camel capturará automáticamente una grabación JFR y la guardará en el disco. La salida del archivo se muestra en el registro, que luego puede abrir desde el control de la misión JDK.  

Publicar un comentario

0 Comentarios