Configurando HPROF no JBoss AS 7.1.2 ( JBoss EAP 6 )
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:
- http://www.lshift.net/blog/2006/03/08/java-memory-profiling-with-jmap-and-jhat
- http://rafaeltuelho.net.br/2012/07/04/colhendo-envidencias-em-caso-de-erro-crash-na-jvm/
- http://middlewaremagic.com/weblogic/?p=2241
Abraços
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
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
5 de dezembro de 2012 às 12:47
tentei configurar para windows e nao funcionou
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.
5 de dezembro de 2012 às 15:26
alterei o standalone.conf.bat e tambem nao rolou
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