18
nov
09

Monitorando Servidores JAVA com JCONSOLE

cafe

Vai um café ai?

Um SysAdmin que não utiliza nenhuma ferramenta de monitoramento em seus servidores, está correndo um grande risco. Primeiro por não ter dados mais concretos sobre o desempenho normal de seus “filhotes”. Segundo que ele não pode prever uma falha, já que pode não conseguir visualizar que o número de requisições ao Apache estão crescendo muito rapidamente, por exemplo, ou que o consumo de memória da JVM do tomcat está fora do normal.

Ferramentas de monitoramento é o que não falta no mercado, tanto proprietárias quanto opensource. Entre elas, posso citar: Cacti, Nagios, Munin, Ganglia, Query Analyzer (MySQL – proprietário), Zenoss, etc. Estes são os que eu lembro de cabeça, mas uma busca no Google pode encontrar muitas outras ferramentas. IMHO estatística nunca é demais. Quanto mais dados sobre o desempenho dos servidores que eu cuido eu tiver, melhor será a decisão que eu vou tomar. Tenho meu planejamento para o blog, posts específicos de cada ferramenta que eu utilizo. Espero conseguir fazer todos eles… 😀

Ultimamente tenho trabalho com servidores JAVA. E JAVA, se você não controlar, pode dar muita dor de cabeça, principalmente pelo uso descontrolado de memória. Sem contar que quanto melhor tunado o servidor JAVA estiver, melhor vai ser a performance da aplicação. Como eu precisava de uma ferramenta que me permitisse visualizar o comportamento do servidor, fui atras de alguma q atendesse minhas necessidades. Encontrei o santo JCONSOLE, que já vem com o próprio JAVA. Ele tem tudo que eu precisava. Monitora a memória (Utilização, Garbage Collector, Pool), Threads e Classes.

Para que eu consiga acessá-lo remotamente, preciso adicionar alguns parâmetros na inicialização do meu Application Server. Neste exemplo vou usar o Tomcat, mas acredito que todos os Servlets JAVA aceitem os parâmetros iguais aos que serão apresentados aqui. (Utilizo a mesma configuração no Resin por exemplo)

A configuração consiste em 3 passos:

  1. Setar os parametros na variável CATALINA_OPTS;
  2. Criar os arquivos de controle de acesso jmxremote.access e jmxremote.password
  3. Reiniciar o serviço (tomcat)

1. Setando os parâmetros da variável CATALINA_OPTS:

As opções que vamos incluir nesta variável são:

  • -Dcom.sun.management.jmxremote                     # permite o monitoramento da jvm remotamente
  • -Dcom.sun.management.jmxremote.port=9099      # porta que  serviço irá rodar
  • -Dcom.sun.management.jmxremote.ssl=false        # não utiliza SSL
  • -Djava.rmi.server.hostname=meuservidor.com.br  # nome do host

Como aqui eu tenho um script de inicialização do tomcat, eu adiciono estas opções direto no script que fica no /etc/init.d, adicionando a seguinte linha ao script:

CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9099 -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=meuservidor.com.br"; export CATALINA_OPTS

Se você não tiver um script de inicialização, você pode criar e exportar a variável na mão antes de iniciar o tomcat, ou colocar a linha acima no arquivo /etc/enviroment, ou no /etc/profile, notando que o profile só é executado quando o usuário faz login na máquina. Feito isso, vamos a próxima parte.

2. Criando os arquivos de controle de acesso:

Como bom SysAdmin, eu quero que o acesso as informações da JVM tenham acesso restrito. Para isso, vamos criar os arquivos que irão controlar esse acesso. Esses arquivos ficam armazenados dentro do diretório do JAVA, e toda vez q alguma aplicação que está com o jmxremote habilitado utilizar autenticação, ele irá consultar estes arquivos, que são o jmxremote.access e jmxremote.password. Uma informação adicional é que eu posso dizer, utilizando outras opções setadas na variável CATALINA_OPTS, quais arquivos o java deve consultar para verificar as permissões de acesso, mas nesse exemplo, esta opção não vem ao caso.

Então, vamos entrar no diretório onde ficarão armazenados os arquivos de controle de acesso:

# cd $JAVA_HOME/jre/lib/management

E agora criamos os arquivos. O conteúdo do arquivo é tão simples, que podemos utilizar o comando echo para cri-alos, já com o conteúdo desejado. neste exemplo, quero criar dois usuários, um com permissões de leitura, e outro com permissão de leitura e escrita:

# echo "fabio readonly" > jmxremote.access
# echo "fabiow readwrite" >> jmxremote.access

Cuidado com os caracteres “>” e “>>” para não sobrescrever o conteúdo do arquivo no segundo comando. Mesma coisa para o arquivo que armazena as senhas:

# echo "fabio minhasenha" > jmxremote.password
# echo "fabiow minhasenha2" >> jmxremote.password

A permissão destes arquivos deve ser modificada paa 600, portanto:

# chmod 600 jmxremote.access
# chmod 600 jmxremote.password

3. Para completar, reiniciamos o serviço:

# service tomcat restart

ou

# /etc/init.d/tomcat restart

ou

# sh $CATALINA_HOME/bin/shutdown.sh
# sh $CATALINA_HOME/bin/startup.sh

Feito isso, verifique se o tomcat iniciou corretamente, conferindo se o processo foi criado, e dando uma olhada no log:

# ps ax |grep tomcat
# tail -n 100 $CATALINA_HOME/logs/catalina.out

Se estiver tudo ok, você já pode se conectar ao servidor utilizando o jconsole.

PS.: Os dados coletados durante a execução do jconsole, não são armazenados. Portanto, se você desligá-lo, e ligá-lo novamente, os dados obtidos na última execução do programa não estarão mais lá, e a timeline fica vazia outra vez. 😦

[]s

Anúncios

0 Responses to “Monitorando Servidores JAVA com JCONSOLE”



  1. Deixe um comentário

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s


%d blogueiros gostam disto: