Melhore esta página

Ajuda on-line do JavaMelody monitoring

O JavaMelody monitoring é uma ferramenta para medir e calcular estatísticas sobre o funcionamento real de uma aplicação através da utilização do aplicativo pelos usuários.
O monitoramento é baseado principalmente nas estatísticas das requisições realizadas e nos gráficos de evolução gerados.
Esta ferramenta permite melhorar as aplicações em processo de QA (controle de qualidade) e em produção, e ajuda a:

Project JavaMelody Project

Home page
Downloads
Release notes

Docs Documentações

Java SE documentations
Java SE Platform at a Glance
Troubleshooting Guide for Java SE 8
Monitoring and Management for Java SE 8
Java SE 6 Performance

Estado Sumário

Na página de monitoração, o sumário apresenta gráficos de evolução para diversos valores de medições.
Essas medições são tomadas em um tempo T, por exemplo, a cada dois minutos. Cada gráfico acompanha a evolução de um valor medido no curto ou longo prazo, escolhido com links sobre o sumário: dia dia a dia, semana semana a semana, mês mês a mês, ano ano a ano ou personalizado por um período escolhido. Em cada gráfico, o valor médio é exibido em verde e o valor máximo, em azul, com números abaixo do mesmo. And in the zoomed charts the 95th percentile line is displayed in magenta. It shows what would be the maximum on the period if 5% of the highest values (short peaks) were excluded. The units in the charts are chosen based on the values: "m" is for milli (1 / 1000), "k" is for kilo/thousands, "M" is for mega/millions, "G" is for giga/billions and "u" is for micro (1 / 1000000). Os gráficos são persistidos: um reinício do servidor de aplicação não tem influência sobre eles, exceto por um intervalo nas medidas.
Cada gráfico pode ser ampliado e redimensionado, clicando sobre eles no sumário.

Os gráficos exibidos são: As horas nos gráficos para o dia corrente dependem da hora do servidor e do fuso horário (como definido pelo Sistema Operacional ou o especificado para o servidor de aplicação).
O link 'Atualizar atualizar' atualiza a página e os gráficos. O link 'PDF PDF' exibe o relatório no formato PDF para o Adobe Reader.
Se um servidor de coleta é usado para exibir a monitoração para diversos servidores em uma Farm ou em um Cluster, o gráfico da memória é o somatório das memórias de cada servidor, mas o percentual de CPU é entre 0 e 100 para todos os servidores, e o número de sessões HTTP é o somatório de sessões em cada servidor, bem como o número de threads ativas, o número de conexões JDBC ativas ou usadas, e o número de acessos por minuto ou o tempo médio em milissegundos.

Gráfico de Memória: caso de uso de um aplicativo sendo utilizado de forma intermitente (dia / noite, por exemplo)

Memória

A memória no gráfico aumenta rapidamente quando a aplicação é usada e aumenta lentamente, mas ainda aumenta, quando o aplicativo não é usado. Um gráfico com inclinações, como no exemplo acima, é normal mesmo se o aplicativo não for usado.
Em todos os casos, e se necessário, a memória é finalmente liberada, de uma só vez, pelo coletor de lixo (CL principal) e vai para um nível baixo, antes de voltar a subir rapidamente ou lentamente. Se o conjunto de ações é suficientemente fino, o gráfico também mostra os CLs secundários como pequenas variações no gráfico entre os coletores de lixo principais (CL). Estes coletores de lixo secundários liberam, também alguma memória, mas em menor quantidade que os coletores de lixo principais (CLs principais). É possível forçar um coletor de lixo principal com a ação 'Coletor de lixo Executar o coletor de lixo' na parte 'Informações do sistema Informações do sistema' do relatório.

Gráfico de memória: caso de uso de uma saturação da memória

Se a memória no gráfico chega ao máximo e se a aplicação não pode liberar um pouco de memória com o coletor de lixo, o servidor possivelmente causará algum "OutOfMemoryErrors: Java heap space" para interromper a execução e liberar alguma memória se possível.
Até que a memória seja suficiente, a CPU permanece em 100% porque o coletor de lixo é executado de forma permanente. Isso pode causar extrema lentidão ou um bloqueio do servidor de aplicativos.
A solução pode ser incrementar o valor máximo para a memória java (parâmetro Xmx na configuração do servidor), e, possivelmente, a memória física do servidor ou otimizar, se possível, a memória utilizada pela aplicação.

Memória Perm Gen: caso de uso de uma saturação da memória Perm Gen

Se o valor da memória Perm Gen aumenta ao máximo e se a aplicação não consegue liberar um pouco da mesma, o servidor, possivelmente, causará alguns "OutOfMemoryErrors: Perm Gen space" interrompendo a execução da aplicação. Isso pode bloquear todos os recursos em sua aplicação.
As soluções podem ser incrementar a memória Perm Gen máxima (parâmetro XX:MaxPermSize na configuração do servidor, 64 MB por padrão), e, possivelmente, a memória física do servidor, ou reduzir, se possível, o número de classes carregadas pela aplicação.

Gráficos de threads ativas e conexões JDBC ativas: Caso de uso de nível contínuo plano (requisições longas)

threads ativas

Quando um aplicativo é pouco utilizado ou não é utilizado, os gráficos de threads ativas e o de conexões JDBC ativas devem ficar em 0. Na verdade, a maioria das requisições são, felizmente, rápidas e curtas e a maioria das medidas (realizadas a cada 2 minutos, por exemplo) são tomadas sem requisições ativas, exceto 1 ou 2 vezes ocasionalmente mostradas como um pico.

Mas, quando há um nível estável plano no gráfico de threads ativas, como no exemplo acima, isto significa que há uma ou várias requisições que são longas (vários minutos ou várias horas) e que podem, potencialmente, saturar o servidor de aplicativos ou banco de dados.
Para descobrir a causa:

Gráficos de conexões JDBC utilizadas: caso de uso de um vazamento de conexões JDBC

Em geral, as conexões JDBC são compartilhadas em um pool de conexões com uma fonte de dados (Data Source) JDBC, que permite, em particular, não reabrir as conexões à base de dados continuamente e que também define um número máximo de transações que podem ser executadas simultaneamente por instância do servidor de aplicativos.
É possível, no JavaMelody, ver 2 gráficos de conexões JDBC ativas e conexões JDBC usadas. O gráfico de conexões JDBC ativas exibe o número de conexões executando consultas SQL. E o gráfico de conexões JDBC usadas exibe o número de conexões abertas que são usadas em transações com o banco de dados, mas não necessariamente executando consultas SQL.
Se o aplicativo monitorado contém um vazamento de conexões JDBC, em alguma condição particular, as conexões são usadas desnecessariamente e permanecem indisponíveis fora do pool de conexões. O gráfico de conexões utilizadas pode mostrar que seu número aumenta sem diminuir ao mínimo configurado no pool de conexão da fonte de dados (datasource) mesmo se o servidor não tiver nenhuma atividade, à noite, por exemplo. Atingindo o máximo, os erros são registrados no pool de conexões, porque não há mais conexão disponível.
Se há suspeita de vazamento de conexões JDBC, tempos e rastreamentos de pilha mostrando onde as conexões foram abertas podem ser visualizados pelo link 'Conexões Conexões JDBC abertas' em 'Informações do systema Informações do sistema' no relatório. (Este link estará disponível se o parâmetro 'system-actions-enabled' tiver sido configurado como 'true'). Uma leitura atenta do código para esses rastreamentos de pilha irá confirmar ou não o vazamento de conexões JDBC.

O gráfico de conexões JDBC utilizadas e os rastreamentos de pilha de conexões são de pouca utilidade se um pool de conexão é utilizado diretamente através de um driver JDBC e sem uma fonte de dados (datasource), porque, neste caso, você visualizará neste gráfico e nestes rastreamentos de pilha apenas as aberturas realizadas através do pool de conexões e não o uso real de conexões pela aplicação.

Estatísticas Estatísticas

As estatísticas de um contador mostram as estatísticas das requisições executadas no servidor de aplicativos.
Hoje, existem 8 contadores de requisições: Para cada contador, uma requisição aparece nas estatísticas quando ela termina; para conhecer as requisições inacabadas veja a sessão 'Requisições correntes Requisições correntes' no relatório.
Quanto aos gráficos, as estatísticas das requisições são para um período pequeno ou grande, escolhido através dos links acima do gráfico: o dia (desde 0h), a semana, o mês ou o ano. Então, é possível ver as estatísticas somente para o dia atual, ou por exemplo, para uma versão do aplicativo implantado há um mês sem as estatísticas das versões anteriores.
E para cada contador, o relatório exibe o resumo de estatísticas para todas as requisições (global), das estatísticas que vão além do limiar de alerta de nível 1 (warning) daqueles que vão para além do limiar de alerta de nível 2 (severe). Os detalhes das estatísticas para cada requisição são exibidas clicando no link '+ Detalhes'.

Cada estatística da requisição exibe: e se é um HTTP, EJB, Spring, Guice interfaces, ações jsf, ações struts ou estatística JSP: Os tempos médios, os tempos máximos e os tempos médios de CPU são cumulativos: por exemplo, os tempos médios de HTTP incluem o tempo médio de EJB e o tempo médio de SQL; além disso, os tempos médios de CPU para o HTTP incluem os tempos médios de CPU para o EJB e os tempos médios de CPU para o SQL. Mas os tempos de espera como paradas ou aguardando à espera de I/O não consomem CPU, assim, eles são incluídos nos tempos médios, mas não em tempos médios de CPU.

Como em todas as tabelas do relatório, as tabelas de estatísticas pode ser ordenadas em ordem ascendente ou descendente, clicando no cabeçalho das colunas.
As estatísticas são mantidas para cada contador: um reinício do servidor da aplicação não tem qualquer influência sobre eles.
Se um servidor coletor é usado para exibir o monitoramento de vários servidores em uma Farm ou em um Cluster, as estatísticas dos contadores são globais para todos os servidores.

Erros HTTP no sistema Estatísticas de erros HTTP no sistema

As estatísticas de erros HTTP no sistema mostram os erros que voltaram para o filtro HTTP do monitoramento, seja por exceções geradas pela aplicação, através de um servlet, seja por um código de erro HTTP (404 "não encontrado" ou "500 Erro Interno do Servidor", por exemplo, Lista completa) Estas estatísticas exibem a lista dos 250 erros mais frequentes do sistema com o número de casos de cada erro no período escolhido, e com o tempo médio da requisição para cada erro. Somente o erro mais frequente é apresentado inicialmente, os outros erros serão exibidos clicando no link '+ Detalhes'. As datas, horários, os usuários e as solicitações HTTP completas dos últimos 100 erros são exibidos clicando no link '+ Últimos erros'. Ao clicar sobre o nome de um erro, é possível ver para este erro, o rastreamento da pilha do java, quando ele é uma exceção java.
Estas estatísticas de erros permitem melhorar a confiabilidade do aplicativo com base em seu uso real na produção.

Logs de erros de sistema Estatísticas de erros do sistema

As estatísticas dos logs de erros do sistema exibem 'alertas' e 'erros' produzidos pelo aplicativo (as bibliotecas log4j do Apache, logback quanto a java.util.logging do JDK são suportadas). Estas estatísticas exibem a lista dos 500 erros mais frequentes registrados com o número de casos de cada erro ocorrido no período escolhido. Apenas o log do erro mais frequente é exibido inicialmente, os outros registros no log serão exibidos, clicando no link '+ Detalhes'. As datas, horários, os usuários e, eventualmente, as requisições completas dos últimos 100 erros HTTP dos logs são exibidas clicando no link '+ Últimos erros'. Ao clicar sobre o nome de um log de erro, é possível ver, para este log, o rasteamento da pilha do erro quando um exceção java tiver sido escrita no log.
Estas estatísticas de erros registradas no log permitem melhorar a confiabilidade da aplicação com base no seu uso real na produção.

Requisições correntes Requisições correntes

As requisições correntes exibem, no momento da geração do relatório, as execuçções das requisições que não terminaram.
A árvore de solicitações HTTP, EJB possivelmente, Spring e/ou SQL é exibida, para cada uma das requisições, juntamente com o tempo já decorrido, o tempo gasto de CPU, o número de requisições SQL já executadas e o tempo SQL destas requisições.
As estatísticas globais das requisições são exibidas novamente para as requisições correntes: tempo médio, a média de tempo de CPU, média de acessos SQL e tempo médio de SQL. Isso permite comparar as requisições correntes com as estatísticas globais.
O rastreamento da pilha do erro atual do java é exibido como uma dica na thread.
Somente a maior requisição é apresentada inicialmente, as outras são exibidas clicando no link '+ Detalhes'.

Informações sobre o sistema Informações sobre o sistema

As informações sobre o sistema são exibidas no momento da geração do relatório com algumas informações sobre o servidor de java, seu estado e do sistema operacional do servidor.
As principais informações apresentadas, inicialmente, são: memória java usada, número de sessões HTTP, número de threads ativas, número de conexões JDBC ativas e número de conexões JDBC usadas Estes são os mesmos valores que são usados para os gráficos.
As outras informações, tais como a versão do servidor, do sistema operacional ou do banco de dados ou a memória do sistema operacional, são exibidas clicando no link '+ Detalhes '.

Nesta parte das informações do sistema, alguns links permitem executar ações do sistema: Se um servidor coletor é usado para exibir a monitoração de vários servidores em uma Farm ou em um Cluster, as informações do sistema de cada servidor são exibidas (agregadas para a lista de sessões e histograma de memória) e as ações são executadas em cada servidor, um de cada vez.

Threads Threads

Esta tabela exibe a lista de todas as threads no servidor, com a prioridade de cada uma, o estado e a pilha de rastreamento em uma tooltip, entre outras informações.

Caches de dados Caches de dados

Os caches de dados exibem a lista de caches no aplicativo java, desde que a biblioteca ehcache seja utilizada por eles.
Para cada um dos caches, algumas estatísticas são exibidas: o número de objetos em memória e em disco no momento, a eficiência da memória cache (percentual desde o início do servidor de acessos ao cache de memória em comparação com os acessos ao cache em disco), a eficiência global do cache (percentagem do cache de memória ou cache de disco comparado com todos os acessos ao cache, incluindo dados não presentes no cache). A configuração de cada cache também é exibida para obter informações.
Since ehcache v2.1, the caches statistics are not enabled by default. So you need to enable them by adding statistics="true" in all the configurations of the caches, in order to display the efficiency values of the caches.
Um botão está disponível para limpar todos os caches.

Jobs Jobs

Os jobs exibem a lista de tarefas (ou lotes) no aplicativo java, desde que a biblioteca quartz seja utilizada por eles.
Para cada job, o tempo médio, o último erro com rastreamento da pilha para um período escolhido, e os tempos da execução anterior e da próxima execução são exibidos. Como nos pedidos HTTP, as estatísticas de trabalhos são exibidas com tempos médios, o tempo médio de CPU, acessos SQL e tempos de SQL para o período selecionado.
Botões estão disponíveis para fazer uma pausa ou retomar um ou todos os jobs.
Se você tem jobs Quartz agendados com Spring, mas você não vê job algum no relatório, você adicionou a propriedade "exposeSchedulerInRepository", como diz o guia do usuário?

Linguagem

O monitoramento é exibido em Francês, Inglês ou Português Brasileiro dependendo da linguagem preferida em seu browser. Se o monitoramento está em língua francesa ao invés de estar no idioma Português, você deve modificar o idioma de preferência. Por exemplo, em Firefox, abra o menu Editar e "Ferramentas, Opções, Conteúdo, Idiomas, ... Selecionar" e colocar "Português/Brasil [pt-br]" em primeiro lugar:

langue

External API

The external API gives you access to some data, as XML or JSON for example. Try it in the api page.

Desktop Desktop

The monitoring reports can be displayed in a "Desktop" application. This application is started by a click on the link "Desktop", at the top of the monitoring page, and it uses JavaWebStart and the local JRE.
But the application is auto-signed, so it must be authorized before by adding the download site in the exceptions of JavaWebStart. For this, click : "Start menu, Java, Configure Java, Security, Edit site list, then copy and paste https://github.com/javamelody/javamelody and OK". More information : Oracle documentation.

Créditos de Ícones

Silk, mini and flag icons (Creative Commons)

Tango icons (GPL)