JMX Tools
Ferramentas de Monitoração
2
Java Management
              eXtension




‟
    The JMX technology provides the tools for
   building distributed, Web-based, modular and
     dynamic solutions for managing and
    monitoring devices, applications, and
              service-driven networks.



http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/index.jsp   3
Simple Network
Management Protocol




‟
 Simple Network Management Protocol
       (SNMP) is used in network
    management systems to
monitor network-attached devices for
 conditions that warrant administrative
               attention.


http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol   4
JMX    Java
SNMP   Rede


              5
SNMP
                    monitoração
                   gerenciamento




Dispositivo SNMP                   Console SNMP

                                                  6
JMX
                  monitoração
                 gerenciamento




Aplicação JMX                    Console JMX

                                               7
Console SNMP
  - Nagios -




               8
Console JMX
  - MC4J -




              9
Managed Beans
        mbean




mbean           mbean




        mbean

                        10
Microkernel
                    mbean




mbean                                    mbean




                    mbean



 http://www.jboss.org/community/docs/DOC-10671
 http://www.jboss.org/community/docs/DOC-10543   11
JBoss




http://www.jboss.org/file-access/default/members/jbossas/freezone/docs/Server_Configuration_Guide/4/html/The_JBoss_JMX_Microkernel-An_Introduction_to_JMX.html   12
13
Desafio
mbean   mbean   mbean   mbean   mbean   mbean   mbean   mbean   mbean




mbean   mbean   mbean   mbean   mbean   mbean   mbean   mbean   mbean


                                                                        14
Console JMX
    nativo do
      JBoss




mbean




                 15
MBeans têm atributos




                   16
MBeans têm operações




                       17
Resultado de uma
    operação




                   18
Outros
Consoles JMX



               19
twiddle
                                                  CLI do JBoss




app/jboss-4.2.2.GA/bin$ ls
classpath.sh                  probe.sh       twiddle.sh
javassist.jar                 run.bat        wsconsume.bat
jboss-profiler-plugins.jar    run.conf       wsconsume.sh
jboss-profiler.jar            run.jar        wsprovide.bat
jboss-profiler.properties     run.sh         wsprovide.sh
jboss_init_hpux.sh            shutdown.bat   wsrunclient.bat
jboss_init_redhat.sh          shutdown.jar   wsrunclient.sh
jboss_init_suse.sh            shutdown.sh    wstools.bat
jmxremote.password            twiddle.bat    wstools.sh
jmxremote.password.template   twiddle.jar
probe.bat                     twiddle.log




                                                                 20
get             atributo


twiddle            mbean

          invoke           operação   parâmetros




                                                   21
./run.sh
jboss-4.2.2.GA/bin$ ./twiddle.sh get jboss.system:type=ServerInfo HostAddress
10:54:35,761 ERROR [Twiddle] Exec failed
org.jboss.util.NestedRuntimeException: - nested throwable: (javax.naming.CommunicationException [Root exception is
java.rmi.ConnectException: Connection refused to host: 192.168.1.17; nested exception is:
        java.net.ConnectException: Connection refused])
        at org.jboss.console.twiddle.Twiddle$1.getServer(Twiddle.java:143)
        at org.jboss.console.twiddle.command.MBeanServerCommand.getMBeanServer(MBeanServerCommand.java:59)
        at org.jboss.console.twiddle.command.GetCommand.execute(GetCommand.java:149)
        at org.jboss.console.twiddle.Twiddle.main(Twiddle.java:305)




                        ./run.sh -b 192.168.1.17
jboss-4.2.2.GA/bin$ ./twiddle.sh get jboss.system:type=ServerInfo HostAddress
11:05:41,966 ERROR [Twiddle] Exec failed
org.jboss.util.NestedRuntimeException: Could not obtain connection to any of these urls: localhost:1099 and discovery
failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is
java.net.SocketTimeoutException: Receive timed out]; - nested throwable: (javax.naming.CommunicationException: Could not
obtain connection to any of these urls: localhost:1099 and discovery failed with error:
javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed
out] [Root exception is javax.naming.CommunicationException: Failed to connect to server localhost:1099 [Root exception
is javax.naming.ServiceUnavailableException: Failed to connect to server localhost:1099 [Root exception is
java.net.ConnectException: Connection refused]]])



                               ./run.sh -b 0.0.0.0
jboss-4.2.2.GA/bin$ ./twiddle.sh    get jboss.system:type=ServerInfo HostAddress
HostAddress=192.168.1.17



                                                                                                                      22
$ ./twiddle.sh get jboss.system:type=ServerInfo HostAddress
HostAddress=192.168.1.17

$ ./twiddle.sh get jboss.system:type=ServerInfo OSArch
OSArch=ppc

$ ./twiddle.sh get jboss.system:type=ServerInfo JavaVersion
JavaVersion=1.5.0_16
                                                              23
$ ./twiddle.sh invoke jboss.system:type=ServerInfo listThreadCpuUtilization
<table><tr><th>Thread Name</th><th>CPU (milliseconds)</th></tr><tr><td>DefaultQuartzScheduler_QuartzSchedulerThread</
td><td>2347</td></tr><tr><td>ScannerThread</td><td>1326</td></tr><tr><td>http-0.0.0.0-8080-1</td><td>814</td></
tr><tr><td>DestroyJavaVM</td><td>782</td></tr>(...)

$ ./twiddle.sh invoke jboss.system:type=ServerInfo listMemoryPools true
<b>Total Memory Pools:</b> 5<blockquote><b>Pool: Code Cache</b> (Non-heap memory)<blockquote>Peak Usage    : init:
163840, used:4691136, committed:4947968, max:33554432<br>Current Usage : init:163840, used:4683776, committed:4947968,
max:33554432<blockquote><br>|---------| committed:4.72Mb<br>
+---------------------------------------------------------------------+<br>|/////////|
| max:32Mb<br>+---------------------------------------------------------------------+<br>|--------| used:4.47Mb</
blockquote></blockquote><br><b>Pool: Eden Space</b> (Heap memory)(...)


                                                                                                                         24
JConsole




http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html   25
JConsole
pré-requisitos




           Java5+


                    26
JConsole
                  execução




Nenhuma VM foi
encontrada para
 monitoração
                             27
JBoss AS




            JBoss não está
           preparado para o
               JConsole
                              28
Parâmetro para
      habilitar monitoração
        via JMX console




...
                              29
Agora sim. VM do JBoss
   automaticamente
detectada pelo JConsole
                          30
Resumo de tudo




                 31
GC




As diversas regiões de memória da JVM
                                        32
33
34
MBeans da JVM
 Cadê os do JBoss?



                     35
Por padrão, o JBoss não usa
o MBean Server da VM, mas
uma implementação própria,
    chamada JBossMX




                              36
Agora sim!




             37
Na vida real,
servidores são
  acessados
remotamente.
                 38
Arquivo de senhas
                        para acesso JMX
                            remoto




  Configuração do
arquivo de senhas no
  run.conf do JBoss




                                           39
JConsole
               mais infos




http://java.sun.com/j2se/1.5.0/docs/guide/
   management/agent.html#jmxagent




                                             40
Usar o JConsole para monitoração das mesmas
informações monitoradas pela linha de comando nos
              exercícios anteriores.

                                                    41
MC4J




http://mc4j.org   42
Parou no tempo




                 43
VisualVM




https://visualvm.dev.java.net/   44
45
java-6-sun-1.6.0.13/bin$ ls
appletviewer   javac          jinfo        native2ascii   tnameserv
apt            javadoc        jmap         orbd           tools.policy
ControlPanel   javah          jps          pack200        unpack200
extcheck       javap          jrunscript   policytool     wsgen
HtmlConverter java-rmi.cgi    jsadebugd    rmic           wsimport
i386           javaws         jstack       rmid           xjc
idlj           jconsole       jstat        rmiregistry
jar            jcontrol       jstatd       schemagen
jarsigner      jdb            jvisualvm    serialver
java           jhat           keytool      servertool




                                                                     46
VisualVM
pré-requisitos




                 47
VisualVM
                    pré-requisitos
          todas são configurações no servidor remoto




Servidor RMI para                   Endereço a ser enviado ao
receber conexões                  VisualVM para que se conecte
     remotas                           ao servidor remoto




                                                                 48
Endereço do
servidor remoto




                  49
Endereço do
 agente JMX




              50
JVMs
monitoráveis no
servidor remoto




                  51
Resumo da
monitoração do
    JBoss




                 52
Monitoração do
    JBoss




                 53
Monitoração do
próprio VisualVM


   Dump da
   memória




                   54
Resumo do dump
  de memória




                 55
Memória consumida
 por cada tipo de
      objeto




                    56
Instâncias de uma
 classe específica




                    57
Threads do   Snapshot das
 servidor      threads




                            58
59
A graça do
VisualVM está em
   seus plugins

                   60
61
62
63
MBeans do JBoss



                  64
65
Troubleshooting
porque os problemas virão




                            66
Conexão estabelecida,
 mas nada acontece.




                          Inicialize o ‘jstatd’ no
                        servidor remoto e todas
                               as aplicações
                           monitoráveis serão
                              identificadas e
                             apresentadas no
                                 VisualVM




                                                     67
Problema de conexão com o
   agente JMX da JVM remota.
     Configure o parâmetro
java.rmi.server.hostname
 no run.conf do servidor remoto   68
VisualVM 1.1
tem problemas
 com JDK6u12


http://blogs.sun.com/nbprofiler/entry/visualvm_fixed_to_correctly_recognize   69
Plugin para resolver a
incompatibilidade do
  VisualVM 1.1 com
      JDK6u12




                         70
$ jstatd
Could not create remote object
access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)
java.security.AccessControlException: access denied (java.util.PropertyPermission
java.rmi.server.ignoreSubClasses write)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.System.setProperty(System.java:727)
    at sun.tools.jstatd.Jstatd.main(Jstatd.java:122)




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




$sudo jstatd -J-Djava.security.policy=$JAVA_HOME/bin/tools.policy

                                                                                       71
eclipse-jmx




http://code.google.com/p/eclipse-jmx/
                                        72
Pelo VisualVM,
acompanhar métricas
de memória, threads
  e processamento
durante os testes de
       carga.




                       73
P&R

JMX Management Tools

  • 1.
  • 2.
  • 3.
    Java Management eXtension ‟ The JMX technology provides the tools for building distributed, Web-based, modular and dynamic solutions for managing and monitoring devices, applications, and service-driven networks. http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/index.jsp 3
  • 4.
    Simple Network Management Protocol ‟ Simple Network Management Protocol (SNMP) is used in network management systems to monitor network-attached devices for conditions that warrant administrative attention. http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol 4
  • 5.
    JMX Java SNMP Rede 5
  • 6.
    SNMP monitoração gerenciamento Dispositivo SNMP Console SNMP 6
  • 7.
    JMX monitoração gerenciamento Aplicação JMX Console JMX 7
  • 8.
    Console SNMP - Nagios - 8
  • 9.
    Console JMX - MC4J - 9
  • 10.
    Managed Beans mbean mbean mbean mbean 10
  • 11.
    Microkernel mbean mbean mbean mbean http://www.jboss.org/community/docs/DOC-10671 http://www.jboss.org/community/docs/DOC-10543 11
  • 12.
  • 13.
  • 14.
    Desafio mbean mbean mbean mbean mbean mbean mbean mbean mbean mbean mbean mbean mbean mbean mbean mbean mbean mbean 14
  • 15.
    Console JMX nativo do JBoss mbean 15
  • 16.
  • 17.
  • 18.
    Resultado de uma operação 18
  • 19.
  • 20.
    twiddle CLI do JBoss app/jboss-4.2.2.GA/bin$ ls classpath.sh probe.sh twiddle.sh javassist.jar run.bat wsconsume.bat jboss-profiler-plugins.jar run.conf wsconsume.sh jboss-profiler.jar run.jar wsprovide.bat jboss-profiler.properties run.sh wsprovide.sh jboss_init_hpux.sh shutdown.bat wsrunclient.bat jboss_init_redhat.sh shutdown.jar wsrunclient.sh jboss_init_suse.sh shutdown.sh wstools.bat jmxremote.password twiddle.bat wstools.sh jmxremote.password.template twiddle.jar probe.bat twiddle.log 20
  • 21.
    get atributo twiddle mbean invoke operação parâmetros 21
  • 22.
    ./run.sh jboss-4.2.2.GA/bin$ ./twiddle.sh getjboss.system:type=ServerInfo HostAddress 10:54:35,761 ERROR [Twiddle] Exec failed org.jboss.util.NestedRuntimeException: - nested throwable: (javax.naming.CommunicationException [Root exception is java.rmi.ConnectException: Connection refused to host: 192.168.1.17; nested exception is: java.net.ConnectException: Connection refused]) at org.jboss.console.twiddle.Twiddle$1.getServer(Twiddle.java:143) at org.jboss.console.twiddle.command.MBeanServerCommand.getMBeanServer(MBeanServerCommand.java:59) at org.jboss.console.twiddle.command.GetCommand.execute(GetCommand.java:149) at org.jboss.console.twiddle.Twiddle.main(Twiddle.java:305) ./run.sh -b 192.168.1.17 jboss-4.2.2.GA/bin$ ./twiddle.sh get jboss.system:type=ServerInfo HostAddress 11:05:41,966 ERROR [Twiddle] Exec failed org.jboss.util.NestedRuntimeException: Could not obtain connection to any of these urls: localhost:1099 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out]; - nested throwable: (javax.naming.CommunicationException: Could not obtain connection to any of these urls: localhost:1099 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to connect to server localhost:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server localhost:1099 [Root exception is java.net.ConnectException: Connection refused]]]) ./run.sh -b 0.0.0.0 jboss-4.2.2.GA/bin$ ./twiddle.sh get jboss.system:type=ServerInfo HostAddress HostAddress=192.168.1.17 22
  • 23.
    $ ./twiddle.sh getjboss.system:type=ServerInfo HostAddress HostAddress=192.168.1.17 $ ./twiddle.sh get jboss.system:type=ServerInfo OSArch OSArch=ppc $ ./twiddle.sh get jboss.system:type=ServerInfo JavaVersion JavaVersion=1.5.0_16 23
  • 24.
    $ ./twiddle.sh invokejboss.system:type=ServerInfo listThreadCpuUtilization <table><tr><th>Thread Name</th><th>CPU (milliseconds)</th></tr><tr><td>DefaultQuartzScheduler_QuartzSchedulerThread</ td><td>2347</td></tr><tr><td>ScannerThread</td><td>1326</td></tr><tr><td>http-0.0.0.0-8080-1</td><td>814</td></ tr><tr><td>DestroyJavaVM</td><td>782</td></tr>(...) $ ./twiddle.sh invoke jboss.system:type=ServerInfo listMemoryPools true <b>Total Memory Pools:</b> 5<blockquote><b>Pool: Code Cache</b> (Non-heap memory)<blockquote>Peak Usage : init: 163840, used:4691136, committed:4947968, max:33554432<br>Current Usage : init:163840, used:4683776, committed:4947968, max:33554432<blockquote><br>|---------| committed:4.72Mb<br> +---------------------------------------------------------------------+<br>|/////////| | max:32Mb<br>+---------------------------------------------------------------------+<br>|--------| used:4.47Mb</ blockquote></blockquote><br><b>Pool: Eden Space</b> (Heap memory)(...) 24
  • 25.
  • 26.
  • 27.
    JConsole execução Nenhuma VM foi encontrada para monitoração 27
  • 28.
    JBoss AS JBoss não está preparado para o JConsole 28
  • 29.
    Parâmetro para habilitar monitoração via JMX console ... 29
  • 30.
    Agora sim. VMdo JBoss automaticamente detectada pelo JConsole 30
  • 31.
  • 32.
    GC As diversas regiõesde memória da JVM 32
  • 33.
  • 34.
  • 35.
    MBeans da JVM Cadê os do JBoss? 35
  • 36.
    Por padrão, oJBoss não usa o MBean Server da VM, mas uma implementação própria, chamada JBossMX 36
  • 37.
  • 38.
    Na vida real, servidoressão acessados remotamente. 38
  • 39.
    Arquivo de senhas para acesso JMX remoto Configuração do arquivo de senhas no run.conf do JBoss 39
  • 40.
    JConsole mais infos http://java.sun.com/j2se/1.5.0/docs/guide/ management/agent.html#jmxagent 40
  • 41.
    Usar o JConsolepara monitoração das mesmas informações monitoradas pela linha de comando nos exercícios anteriores. 41
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
    java-6-sun-1.6.0.13/bin$ ls appletviewer javac jinfo native2ascii tnameserv apt javadoc jmap orbd tools.policy ControlPanel javah jps pack200 unpack200 extcheck javap jrunscript policytool wsgen HtmlConverter java-rmi.cgi jsadebugd rmic wsimport i386 javaws jstack rmid xjc idlj jconsole jstat rmiregistry jar jcontrol jstatd schemagen jarsigner jdb jvisualvm serialver java jhat keytool servertool 46
  • 47.
  • 48.
    VisualVM pré-requisitos todas são configurações no servidor remoto Servidor RMI para Endereço a ser enviado ao receber conexões VisualVM para que se conecte remotas ao servidor remoto 48
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
    Resumo do dump de memória 55
  • 56.
    Memória consumida porcada tipo de objeto 56
  • 57.
    Instâncias de uma classe específica 57
  • 58.
    Threads do Snapshot das servidor threads 58
  • 59.
  • 60.
    A graça do VisualVMestá em seus plugins 60
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
    Conexão estabelecida, masnada acontece. Inicialize o ‘jstatd’ no servidor remoto e todas as aplicações monitoráveis serão identificadas e apresentadas no VisualVM 67
  • 68.
    Problema de conexãocom o agente JMX da JVM remota. Configure o parâmetro java.rmi.server.hostname no run.conf do servidor remoto 68
  • 69.
    VisualVM 1.1 tem problemas com JDK6u12 http://blogs.sun.com/nbprofiler/entry/visualvm_fixed_to_correctly_recognize 69
  • 70.
    Plugin para resolvera incompatibilidade do VisualVM 1.1 com JDK6u12 70
  • 71.
    $ jstatd Could notcreate remote object access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write) java.security.AccessControlException: access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323) at java.security.AccessController.checkPermission(AccessController.java:546) at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) at java.lang.System.setProperty(System.java:727) at sun.tools.jstatd.Jstatd.main(Jstatd.java:122) grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; }; $JAVA_HOME/bin/tools.policy $sudo jstatd -J-Djava.security.policy=$JAVA_HOME/bin/tools.policy 71
  • 72.
  • 73.
    Pelo VisualVM, acompanhar métricas dememória, threads e processamento durante os testes de carga. 73
  • 74.

Editor's Notes

  • #6 Quer dizer, JMX est&amp;#xE1; para Java assim como SNMP est&amp;#xE1; para dispositivos de rede.
  • #7 No caso do SNMP, ele corresponde a uma interface que externaliza dados de dispositivos, que s&amp;#xE3;o lidos por ferramentas especializadas.
  • #9 Exemplo de console SNMP
  • #10 Exemplo de console JMX
  • #11 A especifica&amp;#xE7;&amp;#xE3;o JMX define MBeans como os elementos de externaliza&amp;#xE7;&amp;#xE3;o de informa&amp;#xE7;&amp;#xF5;es de qualquer aplica&amp;#xE7;&amp;#xE3;o Java.
  • #12 O pessoal do JBoss se aproveitou da estrutura modular definida pela especifica&amp;#xE7;&amp;#xE3;o JMX e usou-a na composi&amp;#xE7;&amp;#xE3;o de seu microkernel.
  • #13 Cada MBean do microkernel do JBoss &amp;#xE9; respons&amp;#xE1;vel por algum servi&amp;#xE7;o de infra-estrutura da especifica&amp;#xE7;&amp;#xE3;o JEE.
  • #14 Ent&amp;#xE3;o, por ter seus servi&amp;#xE7;os na forma de MBeans, o JBoss pode ser monitorado por qualquer Console JMX
  • #15 O grande desafio para uma boa monitar&amp;#xE7;&amp;#xE3;o via console JXM &amp;#xE9; conhecer a fundo as dezenas de MBeans que comp&amp;#xF5;em o JBoss.
  • #16 A forma mais f&amp;#xE1;cil de come&amp;#xE7;ar a se acostumar com os MBeans do JBoss &amp;#xE9; atrav&amp;#xE9;s de seu console JMX nativo.
  • #20 Mas existem v&amp;#xE1;rios outros Consoles JMX dispon&amp;#xED;veis no mercado.
  • #26 Extremamente simples. Dispon&amp;#xED;vel a partir do JDK 1.5.
  • #27 O JConsole est&amp;#xE1; inclu&amp;#xED;do nas instala&amp;#xE7;&amp;#xF5;es do Java5 ou superior.
  • #28 Para executar, chame &amp;#x2018;jconsole&amp;#x2019; no terminal.
  • #38 Ap&amp;#xF3;s reinicializar o JBoss e reconectar o JConsole, seus MBeans s&amp;#xE3;o apresentados.
  • #39 Ao habilitar o acesso remoto (com.sun.management.jmxremote.port), a seguran&amp;#xE7;a &amp;#xE9; obrigat&amp;#xF3;ria, salvo desabilita&amp;#xE7;&amp;#xE3;o expl&amp;#xED;cita, como fizemos, apenas para demonstra&amp;#xE7;&amp;#xE3;o.
  • #40 Um template para o arquivo de senhas pode ser encontrado em JRE_HOME/lib/management/jmxremote.password.template
  • #43 Um pouco mais completo que o JConsole, mas....
  • #44 ...est&amp;#xE1; parado desde 2005. O l&amp;#xED;der do projeto, Greg Hinkle, foi pro JON.
  • #46 VisualVM pode ser baixado da Internet.....
  • #47 ...ou aproveitado do pr&amp;#xF3;prio JDK. J&amp;#xE1; vem com o Java6
  • #63 &amp;#xD3;timo para compreender o funcionamento da mem&amp;#xF3;ria da JVM e dos algoritmos de Garbage Collector.
  • #65 Mesma informa&amp;#xE7;&amp;#xE3;o do jmx-console e do JConsole.
  • #66 Desenvolva seus pr&amp;#xF3;prios plugins.