Application de profil 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 affiche quelques messages indiquant qu’il se connecte à un outil de profil et qu’il quitte 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électionnez «Profil»
  2. Dans l’onglet Profiler, j’appuie sur le bouton Mémoire (ou le bouton CPU).
  3. Tomcat quitte

Notez que si je clique avec le bouton droit de la souris sur l’application Tomcat et que vous sélectionnez «Heap Dump», cela semble fonctionner correctement.

J’ai VisualVM profilage VisualVM avec mon application Tomcat . Je devais append les parameters 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 intéressant sur la surveillance de Tomcat avec VisualVM .

Oui, nous profilons les applications Tomcat.

Allez dans catalina.bat ou catalina.sh et ceci dans 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 Ryan, il est préférable d’utiliser setenv.sh . Ceci est mon setenv.sh pour JDK 8. Il manque quelques autres parameters 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 avez déposé le setenv.sh dans bin, vous pouvez voir les modifications 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

J’utilise Tomcat 7 et la configuration complète nécessite plus de parameters 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/

Tout ce que vous avez besoin de faire est de définir ces options de VM:

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