2009-12-11 5 views
60

Je voudrais profiler une application qui s'exécute sur Tomcat avec l'outil VisualVM. Malheureusement, lorsque je demande à VisualVM de profiler Tomcat, Tomcat imprime quelques messages indiquant qu'il se connecte à un outil de profil et qu'il quitte simplement.Application de profil Tomcat avec VisualVM

Détails ...

J'utilise Windows XP, Tomcat 6, VisualVM 1.2.1 et 1.6.0_11. JDK

  1. Dans Visual VM, je clic droit sur l'application Tomcat et sélectionnez « Profil »
  2. Dans l'onglet Profiler, j'appuie sur le bouton de mémoire (ou le bouton CPU).
  3. Tomcat sort

Notez que si je clic droit sur l'application Tomcat et sélectionnez « Dump Heap » qui semble fonctionner OK.

+0

Est-ce que quelqu'un utilise VisualVM pour profiler les applications Tomcat? – rwsimmo

+5

Je ne vois pas d'onglet "profil" lors de la connexion via JMX ou JStatd. Ai-je besoin de versions spéciales de java ou jvisualvm? – Jan

+0

Je ne vois pas non plus d'onglet "profil" lors de la connexion via JMX. Ce problème a-t-il été résolu pour les autres? – Glennn

Répondre

85

J'ai VisualVM profilage de travail avec mon application Tomcat maintenant. Je avais besoin d'ajouter les paramètres suivants au démarrage de tomcat:

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

Here is a nice article sur la surveillance Tomcat avec VisualVM.

+0

Merci, je suis capable de voir les objets créés, etc dans la machine virtuelle visuelle. Je doute que nous ayons une fuite de mémoire dans l'application et je veux voir quel objet contient les références de quels objets? + quels objets prennent combien de mémoire? Est-ce l'objet de Tomcat ou l'objet de son application? Je veux traquer jusqu'au niveau du code est-ce possible? Est-il possible d'attacher mon code en quelque sorte avec visualvm? Merci d'avance. –

+3

Ce n'est pas le profilage. C'est l'échantillonnage. J'ai une connexion JMX mais seul l'échantillonnage du processeur est disponible. Comment obtenir le profilage (instrumentation + mémoire) disponible avec tomcat6.exe? – Chloe

+0

récemment configuré avec Linux, si smd nécessaire http://progrnotes.blogspot.com/2012/07/visualvm-configuration-with-tomcat-linux.html – Sergey

7

Oui, nous faisons le profil des applications Tomcat.

Aller à catalina.bat ou catalina.sh et ceci à votre JAVA_OPTS (J'utilise 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 

Votre JAVA_OPTS devrait ressembler à

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 

Mis à jour après commentaire Ryan qu'il est préférable d'utiliser setenv.sh. Ceci est mon setenv.sh pour JDK 8. Manquant quelques autres paramètres, mais bon pour commencer.

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 

Une fois que vous laissez tomber le setenv.sh dans le répertoire bin, vous pouvez voir les changements dans la console au démarrage.

Voici un autre tutoriel étape par étape au profil des applications Tomcat avec Visual VM: Trouble shooting application performance with Visual VM

+0

Si je suis la description sur le lien je peux connecter VisualVM à tomcat mais il n'y a pas d'onglet de profil. De plus, la description n'est pas exacte. Il dit "Cliquez sur Local ou distant" mais il n'y a pas de sélection dans VisualVM. J'ai choisi "Ajouter une connexion JMX" et spécifié une connexion "localhost: 9090". Je suppose que c'est ce qu'ils veulent dire ... – Wolfgang

+0

@Wolfgang Correction de la langue – vsingh

+11

Vous ne devriez pas vraiment utiliser JAVA_OPTS pour cela - vous devriez utiliser CATALINA_OPTS à la place dans un fichier bin/setenv.sh (vous ne devriez pas éditer catalina.sh - déjà appelle à setenv.sh pour vous) – Ryan

1

J'utilise Tomcat 7 et la configuration complète reqires plus de paramètres à travailler.

-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) 

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

+0

L'ajout de 'java.rmi.server.hostname' fonctionne pour moi. il peut s'agir de l'adresse IP ou du nom d'hôte –

0

Tout ce que vous devez faire définir ces options VM:

-XX: + UnlockCommercialFeatures -XX: + -XX enregistreur de vol: + UnlockDiagnosticVMOptions -XX: + DebugNonSafepoints -XX: FlightRecorderOptions = stackdepth = 512

+0

avec le contrôle de la mission –

Questions connexes