Профилирование приложения Tomcat с помощью VisualVM

Я хотел бы профилировать приложение, работающее на Tomcat, с помощью инструмента VisualVM. К сожалению, когда я говорю VisualVM профилировать Tomcat, Tomcat выводит пару сообщений, указывающих, что он подключается к инструменту профилирования, а затем просто завершает работу.

Подробности…

Я использую Windows XP, Tomcat 6, VisualVM 1.2.1 и JDK 1.6.0_11.

  1. В Visual VM я щелкаю правой кнопкой мыши приложение Tomcat и выбираю «Профиль».
  2. На вкладке «Профилировщик» я нажимаю кнопку «Память» (или кнопку «ЦП»).
  3. Кот выходит

Обратите внимание: если я щелкну правой кнопкой мыши приложение Tomcat и выберу «Дамп кучи», все будет работать нормально.


person rwsimmo    schedule 11.12.2009    source источник
comment
Кто-нибудь использует VisualVM для профилирования приложений Tomcat?   -  person rwsimmo    schedule 14.12.2009
comment
Я не вижу вкладку профиля при подключении через JMX или JStatd. Нужны ли мне специальные версии java или jvisualvm?   -  person Jan    schedule 19.08.2011
comment
Я также не вижу вкладку профиля при подключении через JMX. Эта проблема была решена для других?   -  person Glennn    schedule 11.05.2012


Ответы (4)


Теперь у меня есть VisualVM профилирование, работающее с моим Tomcat приложением. Мне нужно было добавить следующие параметры для запуска tomcat:

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

Вот хорошая статья о мониторинге Tomcat с VisualVM.

person rwsimmo    schedule 16.12.2009
comment
Спасибо, я могу видеть созданные объекты и т. д. в визуальной виртуальной машине. Я сомневаюсь, что у нас есть утечка памяти в приложении, и я хочу увидеть, какой объект содержит ссылки на какие объекты? + какие объекты занимают сколько памяти? Является ли это объектом tomcat или объектом его приложения. Я хочу отследить до уровня кода, это возможно? Можно ли как-то прикрепить мой код с помощью visualvm? Заранее спасибо. - person java_enthu; 22.03.2012
comment
Это не профилирование. Это выборка. У меня есть соединение JMX, но доступна только выборка ЦП. Как получить доступ к профилированию (инструментарий + память) с помощью tomcat6.exe? - person Chloe; 06.07.2012
comment
недавно настроен для Linux, если требуется smd progrnotes.blogspot. ком/2012/07/ - person Sergey; 24.07.2012
comment
@ Хлоя, я только что столкнулся с этим. Я обнаружил, что если я остановлю службу Tomcat6 и запущу Tomcat6.exe как приложение командной строки, VisualVM сможет подключиться к нему как к локальной JVM, и будет доступно профилирование памяти. - person justinpitts; 29.08.2013

Да, мы профилируем приложения Tomcat.

Перейдите к catalina.bat или catalina.sh, а это к вашему JAVA_OPTS (я использую 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

Ваш JAVA_OPTS должен выглядеть так

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

Обновлено после комментария Райана о том, что лучше использовать setenv.sh. Это мой setenv.sh для JDK 8. Не хватает нескольких других настроек, но для начала неплохо.

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

Как только вы перетащите setenv.sh в каталог bin, вы сможете увидеть изменения в консоли при запуске.

Вот еще одно пошаговое руководство по профилированию приложений Tomcat с помощью Visual VM: Устранение неполадок с производительностью приложения с помощью Visual VM

person vsingh    schedule 19.09.2011
comment
Если я следую описанию по ссылке, я могу подключить VisualVM к tomcat, но вкладки профиля нет. Кроме того, описание не является точным. В нем говорится «Нажмите «Локальный или удаленный», но в VisualVM такого выбора нет. Я выбрал «Добавить соединение JMX» и указал соединение localhost:9090. Я думаю, это то, что они имеют в виду... - person Wolfgang; 22.09.2011
comment
Вы действительно не должны использовать для этого JAVA_OPTS - вместо этого вы должны использовать CATALINA_OPTS в файле bin/setenv.sh (вы не должны редактировать catalina.sh - он уже вызывает setenv.sh для вас) - person Ryan; 18.04.2012
comment
Соглашаться. Обновил ответ - person vsingh; 14.04.2016

Я использую Tomcat 7, и для полной конфигурации требуется больше параметров.

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

источник: http://blog.markshead.com/1129/connecting-visual-vm-to-tomcat-7/

person Marco    schedule 04.05.2016
comment
добавление java.rmi.server.hostname работает для меня. это может быть либо ip, либо имя хоста - person XoXo; 11.10.2016

Все, что вам нужно сделать, это установить следующие параметры виртуальной машины:

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

person Nitin Taur    schedule 15.04.2017
comment
с управлением полетами - person Nitin Taur; 15.04.2017