Exercício 1.4: Criando Probes Mais Avançados

Antes de começar, você deve concluir o Exercício 1.3: Implementando seu probe.

O Probekit pode ser utilizado para resolver muitos problemas de depuração e análise de tempo de execução do mundo real. Agora você aprendeu os princípios da gravação e implementação de probes, portanto esta e a próxima lição não descreverão as atividades em detalhes, mas em vez disso, irão fornecer sugestões para probes que podem ser gravadas para investigar seu próprio aplicativo.

Investigando uma Exceção

Assuma que algum método em um servlet ocasionalmente lance uma exceção. A mensagem de log exibida não é muito útil; ela não indica claramente qual é o problema. Para obter informações adicionais, é possível gravar um probe que seja executado sempre que o método lançar uma exceção e o código Java no fragmento do probe pode registrar a mensagem de exceção e também os argumentos do método. Isso o ajudará a perceber porque a exceção está sendo lançada.

Ao gravar e implementar esse probe, note os seguintes pontos:

Investigando o Desempenho Irregular de um Método

Aqui está um exemplo de probe razoavelmente complexo. Digamos que há um método em seu programa que normalmente é executado rapidamente, mas ocasionalmente leva um longo tempo (mais de 100 ms, por exemplo).

É possível gravar um probe que tome nota dos horários de entrada e saída sempre que o método for executado. Quando o tempo de execução for curto, o probe não faz nada. Quando o tempo de execução for longo, o probe relata os argumentos do método e outras informações importantes sobre o estado do programa naquele momento. Isso permite determinar as circunstâncias que levaram aos tempos de execução mais longos.

Ao gravar o probe, note os seguintes pontos:

Na entrada do método, esse probe grava a hora atual. Na saída do método, o probe compara a hora atual e a hora de entrada registrada; se mais de uma certa quantidade de tempo foi decorrida (a quantidade especificada em "thresholdDuration"), ele imprime um relatório utilizando System.out.

Investigando Desempenho Irregular em um Método Recursivo ou Multiencadeado

O probe que acabamos de discutir não funciona para métodos recursivos (direta ou indiretamente) e não funciona para métodos que possam estar em execução em múltiplos encadeamentos ao mesmo tempo. Para solver o problema de recursão, você poderia registrar os horários de entrada em uma Pilha; para resolver o problema de multiencadeamento, poderia armazenar a pilha em uma variável ThreadLocal.

Aqui está o que precisa ser criado, uma versão não recursiva e não encadeada do probe:

Continue o tutorial com o Exercício 1.5: Utilizando uma biblioteca de tempo de execução para lógica de probe mais complexa.

Termos de uso | Feedback
(C) Copyright IBM Corporation 2000, 2005. Todos os Direitos Reservados.