2015-05-18 2 views
2

Я пытаюсь профиль JBoss следующим образом:Как подключиться из плагина IDEA JProfiler к JVM, запущенному без nowait?

  • добавить -agentpath:C:\Progra~1\jprofiler8\bin\windows-x64\jprofilerti.dll к standalone.bat. Обратите внимание: nowait не указан, поэтому виртуальная машина будет ждать подключения графического интерфейса JProfiler.
  • запустить standalone.bat
  • присоединять от IDEA с помощью "Run -> Присоединить к JVM"

Проблема заключается в том, что "Quick Attach" окно не не видит JBoss JVM, независимо от того, что я делаю.

Вот это JBoss стандартный вывод, показывающий, что JProfiler готов:

Calling "C:\src\ss-master\middle\runtime\jboss-as-7.1.1.Final\bin\standalone.conf.bat" 
=============================================================================== 

    JBoss Bootstrap Environment 

    JBOSS_HOME: C:\src\ss-master\middle\runtime\jboss-as-7.1.1.Final 

    JAVA: C:\tools\java\bin\java 

    JAVA_OPTS: -XX:+TieredCompilation -agentpath:C:\Progra~1\jprofiler8\bin\windows-x64\jprofilerti.dll -Dprogram.name=standalone_jprofiler.bat -Xms256m -Xmx8192m -XX:NewRatio=6 -XX: 
PermSize=128m -XX:MaxPermSize=256m -Xss512K -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.war 
ning=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djboss.server.default.config=standalone.xml -Dorg.jboss.server.bootstrap.maxThreads=8 -agentlib:jdwp=transport=dt_socket,se 
rver=y,suspend=n,address=5001 

=============================================================================== 

JProfiler> Protocol version 41 
JProfiler> Using JVMTI 
JProfiler> JVMTI version 1.1 detected. 
JProfiler> 64-bit library 
JProfiler> Listening on port: 8849. 
JProfiler> Instrumenting native methods. 
JProfiler> Can retransform classes. 
JProfiler> Can retransform any class. 
JProfiler> Native library initialized 
JProfiler> VM initialized 
JProfiler> Waiting for a connection from the JProfiler GUI ... 

Вот некоторые из вещей, которые я пробовал:

  • "Быстрый Attach" из JProfiler UI также не см. JBoss VM.
  • С nowait в параметрах запуска соединение успешно (даже с IDEA).
  • Без nowait, я могу только подключиться только к предварительно определенному сеансу в графическом интерфейсе JProfiler. После этого я также могу подключиться к IDEA.

Этот последний пункт является самым интригующим. Какая дополнительная информация имеет сохраненный сеанс, который позволяет ему обнаруживать «ожидающий» агент JProfiler?

Вот ограничения моего случая использования:

  • Я хочу, чтобы начать профилирование от IDEA, так что прыгать в исходный код берет меня к IDEA.
  • Я хочу профилировать стадию запуска, поэтому я не могу позволить добавить nowait.

ответ

2

Когда агент профилирования ожидает подключения при запуске, механизм присоединения не работает, поскольку система jvmstat, которая позволяет подключать, еще не загружена. На самом деле, ни один Java-класс не был загружен, поэтому на этом этапе не может работать Java-код.

Чтобы просмотреть такую ​​ожидающую виртуальную машину, вам нужен сеанс удаленного профилирования. В JProfiler 8 это не поддерживается интеграцией IDE.

Это возможно в JProfiler 9.0 (будет выпущен в ближайшее время). Диалоговое окно attach будет иметь два режима: локальный режим, в котором перечислены все локально запущенные виртуальные машины и опция удаленного подключения, в которой вы можете ввести имя хоста и порт.

Однако вы можете также профилировать конфигурацию JBoss непосредственно из IDEA. Тогда вам не нужно изменять стартовый скрипт.

+0

Спасибо за объяснение. Что касается вашего предложения, я не хочу запускать JBoss из среды IDE. Мне нужно профилировать различные установки JBoss, и наиболее удобно просто подключиться к одной из многих инструментальных JVM (как и для отладки). –