2009-10-13 5 views
11

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

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

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

и добавлены следующие каталоги в передней части PATH:

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] 

Я сделал много погуглить, но ничего не нашел releva нт; Я попробовал переустановку TPTP и различных версий Agent Controller.

В итоге проблема оказалась в том, что я начинал Tomcat с опцией «JPDA», который транслируется в catalina.bat

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

Удаление «JPDA» аргумент команды вызвал JVMTI начать за работой.

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

ответ

20

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

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

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

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

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

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

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

Больше информации здесь: http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzaha/jpdebuga.htm

+0

Итак, можно ли одновременно использовать удаленную отладку с профилированием? –

+1

@michael Я так считаю, но если вы не пытаетесь воспроизвести какие-то странные условия в попытке воспроизвести утечку памяти или гигантский всплеск процессора, не профилирует, когда отлаживается звук, как плохая идея? –

+0

Отличный ответ. Получалась эта ошибка. Мне пришлось отключить режим отладки на моем старом сервере приложений Sun, прежде чем я смогу настроить конфигурацию профилировщика YourKit для работы с ним. Спасибо! – jlpp

3

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

+0

Благодарим за информацию. –

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^