Monitorando o Tomcat com Java VisualVM

Olá pessoal, hoje iremos ver como monitorar o serviço do Tomcat utilizando o aplicativo Java VisualVM, onde podemos analisar consumos de CPU, Memória, Threads, entre outros.

O Java VisualVM


O java VisualVM é um aplicativo que acompanha o JDK que permite o monitoramento dos serviços que estão sendo executados na JVM, com ele podemos analisar consumo de CPU, Mémoria (Heap, Stack, PermGen), Classes inicializadas, Threads, etc.

Por default esta localizado sobe o seguinte diretório:

JAVA_HOME/bin/jvisualvm.exe


O Tomcat 

O Tomcat é um Web Container desenvolvido pela Apache, é um dos conteiners mais utilizados e difundidos no mercado, atualmente esta na versão 7.0.35, segue links para download e informações:

http://tomcat.apache.org/download-70.cgi
http://tomcat.apache.org/tomcat-7.0-doc/index.html

Configurando o Tomcat

Para realizar a configuração do monitoramento do Tomcat através do Java VisualVM, temos que realizar algumas configurações na propriedade Java Options, para isso, vamos acessar o Tomcat Monitor e ir na aba Java, lá devemos adicionar as seguintes linhas:

-Dcom.sun.management.jmxremote.port=8086
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

Estas linhas de configurações são necessárias para o monitoramento do serviço através de JMX, sendo elas a porta de acesso, se a conexão deve ser por SSL e se temos autenticação para realizar o acesso, de acordo com a imagem abaixo:



Configurando o Java VisualVM

Após toda configuração no Tomcat ser realizada, vamos analisar o Java VisualVM para entender seu funcionamento, sua interface de inicialização é a abaixo:


A configuração para acessar o serviço é muito simples, tudo é feito através de uma conexão JMX, para isso vamos no menu File e em Add JMX Connection, a seguinte interface será exibida e devemos informar os dados de conexão e o display name (este opcional)


Após isso já temos o serviço do Tomcat sendo monitorado pelo Java VisualVM, de acordo com a tela abaixo:


A principal aba de recursos de monitoramento é a Monitor, onde podemos analisar o consumo de CPU, Memória, Classes que estão inicializadas e as Threads que estão rodando no momento, abaixo podemos analisar esta tela:


Um outro recurso interessante é o monitoramento das Threads, localizado na aba Threads, de acordo com a tela abaixo:

O Java VisualVM é uma ferramenta interessante para dimensionar o consumo de nossas aplicações dentro do servidor de aplicação, ela possui vários recursos interessantes que podem ser usados para diagnosticar gargalos e evitar consumos excessivos de Mémoria, CPU, entre outros.

Para mais detalhes e funcionalidades desta ferramenta, consulte a documentação oficial da Oracle:


Até a próxima.

Métodos Utilitários da Classe String

Olá pessoal, hoje iremos abordar dicas de utilização de alguns métodos utilitários da classe String, estes ajudam muito no desenvolvimento de rotinas onde manipulamos Strings diversas.

Iremos abordar os seguintes métodos:
  • charAt(int index);
  • concat(String str);
  • contains(String str);
  • equals(String str);
  • length().

charAt(int index)
Este método é utilizado para recuperar um determinado char dentro de uma String, vamos simular a criação de uma String para analisar como este método funciona:


concat(String str)

Em Java é muito comum unir os valores de várias Strings em apenas uma, esta operação chamamos de concatenação, a classe String possui um método utilitário que ajuda a realizar esta operação, vamos analisar seu funcionamento:


contains(String str)

O método contains é muito utilizado quando manipulamos Strings, com ele podemos analisar se um determinado trecho de texto esta ou não dentro da String, este método retorna um valor boolean onde diz se a String possui ou não a sequência de chars passada como parâmetro, vamos analisar seu funcionamento:
















equals(String str)

Sem dúvida este é um dos métodos mais importantes para qualquer classe, este método é herdado da classe Object, que é a superclasse de qualquer hierarquia de classes Java.

Na classe Object a implementação de equals(Object obj) é muito simples e compara apenas se as referências apontam para o mesmo objeto, já na classe String temos uma implementação pronta onde oque é avaliado é o conteúdo do objeto.

A criação de objetos Strings em Java possui algumas particularidades que ajudam no desenvolvimento e desempenho do sistema, um que devemos entender é o conceito de Pool de Strings.

Ao criar Strings de forma literal e com o mesmo conteúdo, a JVM consegue manipular o uso dos objetos fazendo com que várias referências apontem para uma única instância de String, isso é possível pois todo objeto String é imutável, oque garante que a alteração de conteúdo não cause impacto nas outras referências que usem o mesmo objeto, este recurso de reaproveitamento de instâncias, é conhecido como Pool de Strings.

Vamos analisar um código onde iremos utilizar o operador == para avaliar Strings, segue o código:


























Agora vamos analisar as mesmas comparações com o método equals da classe String, segue o código:
























length()

Este método retorno um int contendo o total de chars que uma determinada String possui, com isto podemos navegar em cada char e manipular da forma que desejamos, vamos analisar o funcionamento do método:




















A classe String é uma das mais utilizadas ao desenvolver sistemas utilizando a linguagem Java, acima pudemos analisar o funcionamento de alguns métodos utilitários que a compõem, mas esta classe possui muito outros métodos interessantes, para mais detalhes consulte o JavaDoc no site da Oracle:

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

Até a próxima.