¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Desenvolvendo um perfilador de Java sem viés de ponto de segurança: guia completo.

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

Há alguns meses, comecei a escrever um profiler do zero, e o código se tornou a base das minhas ferramentas de validação de perfis. O único problema com este projeto: eu queria escrever um profiler apropriado sem viés de ponto de segurança desde o início. Este é um esforço nobre, mas requer muita programação em C/C++/Unix que é delicada, e nem todos podem ler código em C/C++.

Para mais informações, considere ler o excelente artigo Java Safepoint and Async Profiling de Seetha Wenner, o mais técnico de JP Bempel , ou o artigo clássico Safepoints: Meaning, Side Effects and Overheads de Nitsan Wakart. Em conclusão: os profilers enviesados por pontos seguros não oferecem uma visão holística da sua aplicação, mas ainda podem ser úteis para analisar problemas de desempenho importantes onde se olha o panorama geral.

Esta postagem no blog tem como objetivo desenvolver um pequeno profiler de Java em código Java puro que todos possam entender. Os profilers não são ciência espacial, e ao ignorar o viés de ponto de segurança, podemos escrever um profiler utilizável que gera um gráfico de chamas em apenas 240 linhas de código.

Você pode encontrar todo o projeto em GitHub . Sinta-se à vontade para usá-lo como base para suas aventuras.

Implementamos o profiler em uma thread de daemon iniciada por um agente Java. Isso nos permite iniciar e executar o profiler junto com o programa Java que queremos perfilar. As partes principais do profiler são:

  • Main: Ponto de entrada do agente Java e inicialização da thread de profiling
  • Options: Analisa e armazena as opções do agente
  • Profiler: Contém o loop de profiling
  • Store: Armazena e exibe os resultados coletados

Classe Principal

Começamos implementando os pontos de entrada do 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();
    }
}

O premain é chamado quando o agente é anexado ao JVM no início. Isso é típico porque o usuário passou o -javagent ao JVM. Em nosso exemplo, isso significa que o usuário executa Java com

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

Mas também há a possibilidade de o usuário anexar o agente em tempo de execução. Nesse caso, o JVM chama o método agentmain . Para mais informações sobre o agente Java, visite a documentação do JDK .

Observe que devemos configurar os atributos Premain-Class e Agent-Class no arquivo MANIFEST do nosso arquivo JAR resultante.

Nosso agente Java analisa os argumentos do agente para obter as opções. As opções são modeladas e analisadas pela classe 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?