Configurando HPROF no JBoss AS 7.1.2 ( JBoss EAP 6 )

Postado em

Olá amigos,

Hoje vamos aprender a configurar  o HPROF que eu considero fundamental para um administrador de instâncias JBoss. O HPROF é uma biblioteca nativa da JVM  que é carregado dinâmicamente na inicialização da mesma, tornando-se parte do processo Java. O HPROF nos fornece dados para analisar a heap do processo Java em questão e também informações relacionadas ao uso de CPU. Os dados gerados podem ser em forma de texto ou binário com isso podemos rastrear e isolar problemas de desempenho que envolvem o uso de memória e problemas com código ineficiente.

O primeiro passo é indenticar o processo alvo na JVM. Podemos monitorar um único processo que é o caso do standalone mode mas também pode ocorrer a necessidade de monitarar instâncias em domain mode e com isso também o domain process controller e host controller.

Como exemplo vamos utilizar a configuração em Standalone Mode, que é uma unica instância como nas versões anteriores do JBoss.

No Linux edite o arquivo JBOSS_HOME/bin/standalone.conf  e procure pela propriedade JBOSS_MODULES_SYSTEM_PKGS e adicione as classes do HPROF separando-as com vírgula como abaixo. Essa propriedade “diz” ao JBoss Modules para deixar as classes do HPROF acessíveis de qualquer class loader.

if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then
JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,sun.tools.hprof,com.sun.tools.hat.internal.parser,com.sun.demo.jvmti.hprof"
#JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman"
fi

Ainda no arquivo JBOSS_HOME/bin/standalone.conf , descomente a variável JAVA_OPTS e deixe-a como abaixo:

JAVA_OPTS="$JAVA_OPTS -agentlib:hprof=file=myhprof.txt"

O meu JBOSS_HOME/bin/standalone.conf nessa parte ficou como abaixo:

if [ "x$JAVA_OPTS" = "x" ]; then
 JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
 JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
 JAVA_OPTS="$JAVA_OPTS -Djboss.server.default.config=standalone.xml"
 JAVA_OPTS="$JAVA_OPTS -agentlib:hprof=file=myhprof.txt"
else
 echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
fi

Inicie o JBoss em Standalone mode e perceba que o arquivo myhprof.txt foi criado no diretório atual.

Para utilizar o formato binário basta modificar o JAVA_OPTS como abaixo:

 JAVA_OPTS="$JAVA_OPTS -agentlib:hprof=format=b,file=MyHeapDump.hprof"

Quando pararmos o JBoss,  o HPROF criará o dump e você verá o seguinte erro:

Dumping Java heap ...HPROF ERROR: Missing jclass when fields needed [hprof_class.c:642]
HPROF ERROR: Trouble with unprepared classes [hprof_reference.c:379]
HPROF ERROR: Missing jclass when fields needed [hprof_class.c:642]
HPROF ERROR: Trouble with unprepared classes [hprof_reference.c:379]
HPROF ERROR: Missing jclass when fields needed [hprof_class.c:642]
HPROF ERROR: Trouble with unprepared classes [hprof_reference.c:379]
HPROF ERROR: Missing jclass when fields needed [hprof_class.c:642]
HPROF ERROR: Trouble with unprepared classes [hprof_reference.c:379]
HPROF ERROR: Missing jclass when fields needed [hprof_class.c:642]
HPROF ERROR: Missing jclass when fields needed [hprof_class.c:642]
HPROF ERROR: Trouble with unprepared classes [hprof_reference.c:379]
allocation sites ... done.

Mesmo com o erro acima o arquivo de dump do HPROF foi criado com sucesso. Me pareceu ser algo relacionado a referência de alguns objetos mas tenho que pesquisar e testar mais algumas vezes.

Para mais informações sobre o HPROF veja o link abaixo:

Outras fontes interessantes sobre JVM e Profile:

Abraços

6 comentários em “Configurando HPROF no JBoss AS 7.1.2 ( JBoss EAP 6 )

    victor neves disse:
    4 de dezembro de 2012 às 9:17

    caramba! maneiro! nunca tinha visto isso!!
    ae Maurício, ta sabendo do que anda acontecendo em Dubai?
    olha ae http://www.bbc.co.uk/portuguese/noticias/2012/12/121203_conferencia_internet_dubai_pai.shtml

    Mauricio Magnani Jr respondido:
    4 de dezembro de 2012 às 11:38

    hehe vlw 🙂

    pow que foda mano os caras querem controlar… vamos ver o que vai acontecer né…

    Hein Victor deixa seu email aqui brother pra eu te mandar um email com algumas vagas de trampo que podem ocorrer mais pra frente ai acho que pode te interessar rsrs

    Abs

      hilner disse:
      5 de dezembro de 2012 às 12:47

      tentei configurar para windows e nao funcionou

        Mauricio Magnani Jr respondido:
        5 de dezembro de 2012 às 13:02

        Não testei no Windows só no Linux mas acredito que deva funcionar… em vez de editar o arquivo standalone.conf no Windows vc tem q editar o arquivo standalone.conf.bat.

    hilner disse:
    5 de dezembro de 2012 às 15:26

    alterei o standalone.conf.bat e tambem nao rolou

      Mauricio Magnani Jr respondido:
      5 de dezembro de 2012 às 15:33

      tendi, bom vou testar hoje no Windows e ver onde está o erro… Obrigado por testar 🙂

      Abs

Deixe um comentário