¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Desarrollando un perfilador de Java sin sesgo de punto de seguridad: guía completa

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 2 Vistas
0
Cargando...

Hace unos meses, comencé a escribir un perfilador desde cero, y el código se convirtió en la base de mis herramientas de validación de perfiladores. El único problema con este proyecto: quería escribir un perfilador adecuado sin sesgo de punto de seguridad desde cero. Este es un esfuerzo noble, pero requiere mucha programación en C/C++/Unix que es delicada, y no todos pueden leer código en C/C++.

Para obtener más información, considera leer el excelente artículo Java Safepoint and Async Profiling de Seetha Wenner, el más técnico de JP Bempel , o el artículo clásico Safepoints: Meaning, Side Effects and Overheads de Nitsan Wakart. En conclusión: los perfiladores sesgados por puntos seguros no te dan una vista holística de tu aplicación, pero aún pueden ser útiles para analizar problemas de rendimiento importantes donde se mira el panorama general.

Esta publicación de blog tiene como objetivo desarrollar un pequeño perfilador de Java en código Java puro que todos puedan entender. Los perfiladores no son ciencia espacial, y al ignorar el sesgo de punto de seguridad, podemos escribir un perfilador utilizable que genere un gráfico de llamas en solo 240 líneas de código.

Puedes encontrar todo el proyecto en GitHub . Siéntete libre de usarlo como base para tus aventuras.

Implementamos el perfilador en un hilo demonio iniciado por un agente Java. Esto nos permite iniciar y ejecutar el perfilador junto con el programa Java que queremos perfilar. Las partes principales del perfilador son:

  • Main: Punto de entrada del agente Java y arranque del hilo de perfilado
  • Options: Analiza y almacena las opciones del agente
  • Profiler: Contiene el bucle de perfilado
  • Store: Almacena y muestra los resultados recopilados

Clase Principal

Comenzamos implementando los puntos de entrada del agente:

public class Main {
    public static void agentmain(String agentArgs) {
        premain(agentArgs);
    }

    public static void premain(String agentArgs) {
        Main main = new Main();
        main.run(new Options(agentArgs));
    }

    private void run(Options options) {
        Thread t = new Thread(new Profiler(options));
        t.setDaemon(true);
        t.setName("Profiler");
        t.start();
    }
}

El premain se llama cuando el agente se adjunta al JVM al inicio. Esto es típico porque el usuario pasó el -javagent al JVM. En nuestro ejemplo, esto significa que el usuario ejecuta Java con

java -javaagent:./target/tiny_profiler.jar=agentArgs

Pero también existe la posibilidad de que el usuario adjunte el agente en tiempo de ejecución. En este caso, el JVM llama al método agentmain . Para obtener más información sobre el agente Java, visita la documentación de JDK .

Ten en cuenta que debemos configurar los atributos Premain-Class y Agent-Class en el archivo MANIFEST de nuestro archivo JAR resultante.

Nuestro agente Java analiza los argumentos del agente para obtener las opciones. Las opciones están modeladas y analizadas por la clase Options:

            
            
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

Sin respuestas

No hay respuestas para mostrar No hay respuestas para mostrar Se el primero en responder

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?