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