JMap.Ява - истекло время ожидания при попытке подключения к отладка сервера - SwDbgSrv.exe


Я пытаюсь запустить и отладить утилиты из солнце.виртуальная машина Java.горячая точка.инструменты и солнце.виртуальная машина Java.горячая точка.коммунальные услуги (например, JMap.java), чтобы лучше понять, что происходит.

К сожалению, я застрял очень рано со следующим сообщением об ошибке и даже не успел отладить много:

Attaching to process ID 5144, please wait...
Error attaching to process: Timed out while attempting to connect to debug server (please start SwDbgSrv.exe)

Похоже, что по какой-то причине инструменты пытаются подключиться к "отладочному серверу", работающему на порту 27000.

В доке солнца.виртуальная машина Java.горячая точка.инструменты.Хеапдумер.Ява я нашел то следующее:

Этот инструмент используется утилитой JDK jmap для сброса кучи целевой процесс / ядро в виде двоичного файла HPROF. Его можно также использовать как автономный инструмент, если требуется.

Поэтому я (возможно, наивно) предположил, что jmap.exe каким-то образом использует это, но у меня никогда не было таких проблем с созданием дампа кучи с помощью jmap. Мне никогда не нужно было начинать сначала другой процесс.

Есть идеи, что мне нужно сделать, чтобы запустить все эти инструменты непосредственно из моего dev env?

Спасибо

1 2

1 ответ:

sun.jvm.hotspot.* инструменты являются частьюHotSpot Serviceability Agent .

Я предполагаю, что вы используете JDK 6 в Windows, потому что сервер отладки больше не требуется с JDK 7. В более ранних версиях вы должны были запустить SwDbgSrv.exe, чтобы использовать агент работоспособности.

Некоторые встроенные утилиты JDK (jmap, jstack) имеют два режима выполнения: кооперативный и принудительный. В обычном кооперативном режиме эти инструменты используютдинамический механизм присоединения для подключения к целевой виртуальной машине. Запрошенная команда: затем выполняется непосредственно целевой виртуальной машиной из целевого процесса.

Принудительный режим (jmap-F, jstack-F) ведет себя совершенно иначе. Инструмент приостанавливает целевой процесс,а затем считывает память процесса с помощью агента обслуживания. Команда выполняется в процессе инструмента, пока целевая виртуальная машина приостановлена. Это то, что делают утилиты sun.jvm.hotspot.*.