Вопрос

Я потратил последние 4 часа, пытаясь настроить память Eclipse TPTP профилирование в экземпляре Tomcat, который должен запускаться удаленно (т.Е.не в Eclipse).Это должно быть возможно в соответствии с TPTP и Agent Документы контроллера.

Я установил компоненты tptp, с помощью (4.6.0) в моем затмение (Галилей) верстак вместе с агентом контроллера в соответствии с инструкции на сайте.Чтобы включить агент, я добавил следующие параметры в командную строку, которая запускает экземпляр Tomcat:

-agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf:allocsites=true

и добавил следующие каталоги в начало ПУТИ:

D:\dev\tools\ac\plugins\org.eclipse.tptp.javaprofiler
D:\dev\tools\ac\bin

При попытке запустить Tomcat я постоянно получал следующую ошибку сообщение:

ERROR: JDWP unable to get necessary JVMTI capabilities. ["debugInit.c",L279]

Я много поискал в Google, но не нашел ничего подходящего;Я попытался переустановить TPTP и различные версии контроллера агента.

В итоге проблема оказалась в том, что я запускал Tomcat с опцией "jpda", которая catalina.bat переводится как

-Xdebug -Xrunjdwp:transport=.....

Удаление аргумента команды "jpda" привело к тому, что JVMTI начал работать.

ИТАК, вопрос в том,:Я не нашел ничего во время любого из моих поисков, чтобы указать, что агент JVMTI несовместим с отладкой.Может кто-нибудь объяснить, что происходит и почему JVMTI + JDWP не является допустимым настройка?

Это было полезно?

Решение

Ни один из ответов на данный момент не является правильным, и это первое сообщение, которое появляется в Google, если вы запрашиваете указанную ошибку, поэтому я чувствую, что необходимо некоторое разъяснение.

JVMTI и JDWP делай работайте вместе, на самом деле они обычно должны использоваться вместе.Вы получите ERROR: JDWP unable to get necessary JVMTI capabilities если -Xrunjdwp (и/или, возможно -agentlib:jdwp) указывается более одного раза в командной строке.Чтобы исправить это, убедитесь, что у вас есть только один из -Xrunjdwp или -agentlib:jdwp в вашей командной строке.

Для получения более подробной информации читайте дальше...

JVMTI (Java Virtual Machine Tool Interface) является преемником JVMDI (Java Virtual Machine Debug Interface Интерфейс отладки виртуальной машины) и JVMPI (Java Virtual Machine Profiling Interface Интерфейс профилирования виртуальной машины).Он включает в себя функциональность как JVMDI, так и JVMPI, которые устарели в Java 5 и были удалены в Java 6.Это API, который предоставляет доступ к внутренним компонентам JVM для целей отладки и профилирования.

JDWP (Java Debug Wire Protocol) - это протокол, который описывает простой механизм передачи команд и ответов.Насколько я знаю, это единственный способ для отладчика, находящегося вне JVM, взаимодействовать с ним и с JVMTI.

JDI (Java Debugger Interface) - это API на стороне клиента (debugger-side), который предоставляет некоторые функции JVMTI при более или менее прозрачном использовании JDWP.

В ошибка упомянутое в ответе Боба Доббса касается вводящего в заблуждение сообщения об ошибке и того факта, что JVM будет пытаться загрузить JDWP один раз за каждый раз, когда оно указано в командной строке.Нигде не указано, что JDWP и JVMTI не могут использоваться вместе.

Более подробная информация здесь: https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/rzaha/jpdebuga.htm

Другие советы

Я столкнулся с той же проблемой, что и вы, но я получил сообщение об ошибке JVM (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6354345), которые проливают некоторый свет на проблему.В основном это сводится к тому, что библиотека Java agent никогда не предназначалась для двойной загрузки в одну и ту же виртуальную машину.Отстой, но, похоже, это основное ограничение системы агентов, что вы не можете делать и то, и другое одновременно.

Для меня это была та же проблема, что и Code Bling post, они были дубликатами -Xrunjdwp не знал, что был второй -Xrunjdwp поскольку это было скрыто в переменной %JAVA_OPTIONS%, проверьте сценарий запуска вашего сервера приложений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top