Exibindo Gargalos de Desempenho

Os gargalos de desempenho pode ser facilmente identificados pela utilização das exibições estatísticas.  Este tópico descreve um cenário no qual procuramos aprimorar o tempo de execução. A exibição Package Statistics é um bom ponto de início pois identificas os pacotes reponsáveis pela tempo de execução lento. A partir daqui, executamos drill down e procuramos pela classe ou método responsável pela execução de desempenho ineficiente.

Ao ativar o aplicativo a ter o perfil definido, permitimos a coleta de informações sobre o fluxo de execução.  (Selecione a opção de definição de perfil, My application is too slow e então a partir das opções Details, selecione Show Execution flow graphical details.)   

Na exibição Package Statistics, quando aberta, tem a seguinte aparência:

 

A exibição mostra estatísticas de diferentes classes, agropadas por seus pacotes contidos.  A exibição pode ser personalizada para exibir qualquer tipo de dados estatísticos, como alocação de memória ou estatísticas baseadas no tempo.  No nosso caso, asseguramos que as colunas relacionadas ao tempo estavam visíveis porque continham as informações que precisávamos. (Clique com o botão direito do mouse, selecione Choose Columns e então defina estas colunas para tornarem-se visíveis).   Também classificamos os pacotes utilizando a coluna de execução Base Time.  Conforme você pode visualizar acima, o pacote com.ibm.ws.ejbpersistence.dataaccess é a execução "hot spot" e, dentro deste pacote, DataAccessRequestImpl é a classe responsável pelo tempo de execução lento.

Assim que obtemos estas informações, executamos drill down na exibição Class Statistics e identificamos o método responsável pelo desepenho ineficiente geral da classe.  


Agora poder visualizar claramente que o método execute é o responsável pelo desempenho ineficiente da classe DataAccessRequestImpl; seu tempo de execução é muito alto em comparação ao tempo gasto no outro método, executeOneRowFBPK.

Vamos observar atentamente a exibição Class Statistics. Há uma coisa realmente interessante a ser observada enquanto estamos aqui: a classe java.text.NumberFormat está próxima à lista de classes responsáveis pelo tempo de execução lento. E, em particular, java.text.NumberFormat.getCurrencyInstance() leva o mesmo tempo gasto naquela classe. Isto pode lhe dar uma idéia sobre quanto custa utilizar alguns métodos aparentemente simples. Mesmo se NumberFormat.getCurrencyInstance() parecer ser uma simples API, chamá-lo várias vezes pode gerar um grande impacto no desempenho geral dos seus aplicativos.

Agora vamos para as chamadas de método para o método DataAccessRequestImpl.execute(). Um recurso eficaz da ferramenta de definição de perfil é a representação gráfica da execução do aplicativo, o que permite que você visualize a execução do método no nível de chamada do método. Esta exibição é utili pois você pode visualizar o padrão de execução e as diferenças entre as chamadas do mesmo método.  Aqui está a exibição Method Invocation para ilustrar a chamada do método DataAccessRequestImpl.execute().


 

Neste gráfico, você pode visualizar o que originou esta chamada na pilha de execução ou pode ir para o código de origem do método.  Também é possível consultar o tempo gasto passando o cursos sobre qualquer barra.

A tabela Method Invocation abaixo mostra as mesmas chamadas de método, mas em um formato tabular. É interessante observar que para a primeira chamada de método, o tempo de execução (consulte a coluna Cumulative Time) é muito alto comparado às chamadas de métodos posteriores.


 

Através da análise da pilha de execução de chamadas de método, podemos localizar a razão desta chamada específica ter sido mais demorada do que o restante das execuções de método. Consultando o padrão de chamadas de método, constatamos que a primeira chamada do método OnlineItembean.FindByValue(IndexedObject) leva muito mais tempo do que o restante das chamadas de método.

Assim, finalmente, constatamos que o método responsável pelo tempo de execução geral extenso é a primeira chamada do método OnlineItembean.FindByValue.

 

Conceitos Relacionados
Visão Geral da Ferramenta de Definição de Perfis

Tarefas Relacionadas
Definindo o Perfil de um Aplicativo
Iniciando ou Anexando um Processo Java

 
 

>