Mauricio Magnani bio photo

Mauricio Magnani

A guy who loves technology and new challenges!

Email Twitter LinkedIn Github

VisualVM é uma ferramenta visual que pode ser utilizada para monitoramento e profiling de processos Java. Com ela é possível criar thread dumps, heap dumps para análise posterior e o melhor de tudo, ela já está inclusa no JDK e pode ser encontrada em JAVA_HOME/bin/jvisualvm.

Para se conectar remotamente a uma instância JBoss EAP 6, alguns passos são necessários. Vou dividir em duas parte para facilitar o entendimento.

Configurando o Lado Servidor ( Instâncias JBoss )

O primeiro passo é permitir a conexão remota utilizando o jstatd. No servidor onde o JBoss está sendo executando crie um arquivo no /opt chamado security.policy com o seguinte conteúdo:

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};

Em seguida Execute o jstatd:

/usr/java/jdk1.7.0_72/bin/jstatd -J-Djava.security.policy=/opt/security.policy

No domain.conf do Host Controller ( onde as instâncias estão sendo executadas ) configure o jboss.bind.address para que as instâncias sejam acessíveis remotamente:

JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=10.8.92.95"

O próximo passo é adicionar um usuário com a Role ( ManagementRealm ) de Gerenciamento como abaixo:

e-mmagnani@JbossHost opt]$ sudo ./jboss/bin/add-user.sh 
 
What type of user do you wish to add?
 a) Management User (mgmt-users.properties)
 b) Application User (application-users.properties)
(a): a 
 
Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username : jboss
Password : jboss@2015
Re-enter Password :
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[  ]:
About to add user 'jboss' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'jboss' to file '/opt/jboss-eap-6.2/standalone/configuration/mgmt-users.properties'
Added user 'jboss' to file '/opt/jboss-eap-6.2/domain/configuration/mgmt-users.properties'
Added user 'jboss' with groups  to file '/opt/jboss-eap-6.2/standalone/configuration/mgmt-groups.properties'
Added user 'jboss' with groups  to file '/opt/jboss-eap-6.2/domain/configuration/mgmt-groups.properties'
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no? no

No domain.xml o Remoting Connector deve ser configurado como abaixo:

<subsystem xmlns="urn:jboss:domain:remoting:1.1">
      <connector name="remoting-connector" socket-binding="remoting" security-realm="ManagementRealm"/>
</subsystem>

A configuração do JMX será a padrão:

<subsystem xmlns="urn:jboss:domain:jmx:1.3">
     <expose-resolved-model/>
     <expose-expression-model/>
     <remoting-connector use-management-endpoint="false"/>
</subsystem>

Se o RBAC estiver ativado adicione também a permissão para o usuário jboss criado anteriormente:

<role name="SuperUser">
    <include>
        <user name="$local"/>
        <user realm="ManagementRealm" name="jboss"/>
    </include>
</role>

Reinicie todos os servidores JBoss envolvidos. A parte de configuração no lado servidor está finalizada.

Configurando o Lado Cliente ( Sua Estação de trabalho )

Para monitorar instâncias remotamente é necessário adicionar o jboss-client.jar no classpath da VisualVM como abaixo:

[mmagnani@mmagnani /]$  sudo /usr/java/jdk1.7.0_72/bin/jvisualvm -cp:a /jboss/jboss-eap-6.2/bin/client/jboss-client.jar

A VisualVM será iniciada:

Em Remote clique com o botão direito e em seguinda Add Remote Host. Preencha com o IP da instância que será monitorada:

Em Advanced Settings observe que o jstatd está configurado para se conectar na porta padrão 1099 que ficou LISTEN quando jstatd foi iniciado no servidor em que JBoss está sendo executado.

Clique em OK para salvar.

Novamente em Remote clique com o botão direito no icone da maquina que foi adiciona e em seguida clique em Add JMX Connection. A URL de conexão com o JMX exposto na instância JBoss deve ser configurado no seguinte formato: service:jmx:remoting-jmx://10.8.92.95:4447. Em Modo Domain a porta utilzada é a 4447 respeitando os possíveis OFFSETs.

Depois de Clicar em OK a VisualVM criará uma conexão com a instância JBoss e estará disponível para ser monitorada.

Observações

  • Acredito que o Sampler Memory não funcione remotamente.
  • A versão utilizada foi JBoss EAP 6.2.4