2009-12-11 10 views
60

Mi piacerebbe profilare un'applicazione che gira su Tomcat con lo strumento VisualVM. Sfortunatamente, quando dico a VisualVM di profilare Tomcat, Tomcat stampa un paio di messaggi che indicano che si sta connettendo a uno strumento di profilo e quindi esce semplicemente.Applicazione Tomcat profilo con VisualVM

Dettagli ...

Sto usando Windows XP, Tomcat 6, VisualVM 1.2.1, e JDK 1.6.0_11.

  1. In Visual VM, right-click sull'applicazione Tomcat e selezionare “Profilo”
  2. Nella scheda Profiler, si preme il pulsante di memoria (o il pulsante CPU).
  3. Tomcat esce

Nota che se right-click sull'applicazione Tomcat e selezionare “heap dump” che sembra funzionare OK.

+0

C'è qualcuno che utilizza VisualVM per profilare le applicazioni Tomcat? – rwsimmo

+5

Non vedo una scheda "profilo" quando si effettua la connessione tramite JMX o JStatd. Ho bisogno di versioni speciali di java o jvisualvm? – Jan

+0

Inoltre non vedo una scheda "profilo" quando ci si connette tramite JMX. Questo problema è stato risolto per gli altri? – Glennn

risposta

85

Ho il profilo VisualVM che funziona ora con l'applicazione Tomcat. Avevo bisogno di aggiungere i seguenti parametri per l'avvio Tomcat:

-Dcom.sun.management.jmxremote.port=8086 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

Here is a nice article sul monitoraggio Tomcat con VisualVM.

+0

Grazie, sono in grado di vedere gli oggetti creati, ecc. Nella VM visiva. Dubito che ci sia una perdita di memoria nell'applicazione e voglio vedere quale oggetto trattiene i riferimenti di quali oggetti? + quali oggetti stanno prendendo quanta parte della memoria? È l'oggetto di Tomcat o l'oggetto della sua applicazione. Voglio rintracciare fino a quando il livello di codice è possibile? È possibile collegare il mio codice in qualche modo con visualvm? Grazie in anticipo. –

+3

Questo non è profiling. Questo è il campionamento. Ho una connessione JMX ma è disponibile solo il campionamento della CPU. Come posso ottenere la profilazione (strumentazione + memoria) disponibile con tomcat6.exe? – Chloe

+0

recentemente configurato con linux, se necessario smd http://progrnotes.blogspot.com/2012/07/visualvm-configuration-with-tomcat-linux.html – Sergey

7

Sì, facciamo il profilo delle applicazioni Tomcat.

Vai catalina.bat o catalina.sh e questo al vostro JAVA_OPTS (sto usando Tomcat 6.0.16):

-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 

tuo JAVA_OPTS dovrebbe essere simile

set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties" -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 

aggiornato dopo Ryan commento che è meglio usare setenv.sh. Questo è il mio setenv.sh per JDK 8. Mancano poche altre impostazioni, ma buone per iniziare.

SUN_JVM_OPTS=" 
    -server \ 
    -XX:MaxMetaspaceSize=3G \ 
    -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled \ 
    -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 \ 
    -XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark \ 
    -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=3 -XX:GCLogFileSize=2M \ 
    -XX:+HeapDumpOnOutOfMemoryError \ 
    -Dsun.net.inetaddr.ttl=60 \ 
    -Dcom.sun.management.jmxremote \ 
    -Dcom.sun.management.jmxremote.port=8480 \ 
    -Dcom.sun.management.jmxremote.authenticate=false \ 
    -Dcom.sun.management.jmxremote.ssl=false" 


# Set custom application options here 
APPLICATION_OPTS="-Dlog4j.configurationFile=patht-to-log/log4j2.xml -Dlog4j.debug=true " 

JVM_OPTS="$GENERAL_JVM_OPTS $SUN_JVM_OPTS" 
CATALINA_OPTS="$JVM_OPTS $APPLICATION_OPTS" 
echo "Tomcat started with settings "$CATALINA_OPTS 

Una volta che si rilascia il setenv.sh nella directory bin, è possibile vedere i cambiamenti nella console all'avvio.

Ecco un altro passo a passo al profilo applicazioni Tomcat con Visual VM: Trouble shooting application performance with Visual VM

+0

Se seguo la descrizione sul collegamento posso connettere VisualVM a tomcat ma non esiste una scheda profilo. Inoltre, la descrizione non è esatta. Dice "Fai clic su Locale o remoto", ma non c'è tale selezione in VisualVM. Ho scelto "Aggiungi connessione JMX" e specificato una connessione "localhost: 9090". Immagino che sia quello che intendono ... – Wolfgang

+0

@Wolfgang Risolto il problema con la lingua – vsingh

+11

Non dovresti davvero usare JAVA_OPTS per questo - dovresti usare CATALINA_OPTS invece in un file bin/setenv.sh (non dovresti modificare catalina.sh - già chiama setenv.sh per te) – Ryan

1

Sto usando Tomcat 7 e la configurazione completa reqires più parametri con cui lavorare.

-Dcom.sun.management.jmxremote=true 
-Dcom.sun.management.jmxremote.port=9090 # port to connect JMX 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Djava.rmi.server.hostname=50.112.22.47" # IP of the server running tomcat (it is necessary) 

fonte: http://blog.markshead.com/1129/connecting-visual-vm-to-tomcat-7/

+0

aggiungendo 'java.rmi.server.hostname' funziona per me. può essere ip o nome host –

0

Tutto quello che dovete fare è impostare queste opzioni VM:

-XX: + UnlockCommercialFeatures -XX: + FlightRecorder -XX: + UnlockDiagnosticVMOptions -XX: + DebugNonSafepoints -XX: FlightRecorderOptions = stackdepth = 512

+0

con controllo missione –