web-dev-qa-db-fra.com

Profil d'une application Tomcat avec VisualVM

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, puis se ferme simplement.

Détails…

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

  1. Dans Visual VM, je clique avec le bouton droit sur l'application Tomcat et sélectionne "Profil"
  2. Dans l'onglet Profiler, j'appuie sur le bouton Memory (ou le bouton CPU).
  3. Sortie de Tomcat

Notez que si je clique avec le bouton droit sur l'application Tomcat et que je sélectionne "Heap Dump" qui semble fonctionner correctement.

61
rwsimmo

J'ai le profilage VisualVM qui fonctionne avec mon application Tomcat maintenant. J'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

Voici un article sympa sur la surveillance Tomcat avec VisualVM.

86
rwsimmo

Oui, nous profilons les 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 le commentaire de Ryan qu'il est préférable d'utiliser setenv.sh. C'est mon setenv.sh pour JDK 8. Il manque 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 déposez le setenv.sh dans le répertoire bin, vous pouvez voir les changements dans la console au démarrage.

Voici un autre didacticiel étape par étape pour profiler les applications Tomcat avec Visual VM: Dépannage des performances des applications avec Visual VM

7
vsingh

J'utilise Tomcat 7 et la configuration complète nécessite plus de paramètres pour fonctionner.

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

1
Marco

Tout ce dont vous avez besoin pour cela, définissez ces options VM:

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

0
Nitin Taur