Avalados por :
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:
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 PascalSe unió el 07/03/2018
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute