visualvm не может видеть процесс Java, запущенный из Cygwin
Если я запускаю процесс Java в консоли Cygwin, а затем запускаю VisualVm, последний не сможет увидеть первый.
Если я запускаю тот же процесс в консоли Dos VisualVM видит это нормально. Я в jdk1.6.0_25. Это происходит как в win7 32b, так и в win7 64b с 64b jvm.
Кто-нибудь может придумать объяснение / обходной путь?
3 ответа
У меня такая же проблема. VM не был показан автоматически, но я смог подключиться через "Add JMX Connection", используя имя хоста и jmx.remote.port...
На VisualVM перейдите в Файл -> Добавить соединение JMX
localhost:3333
Добавьте параметр vm при запуске, например:
-Dcom.sun.management.jmxremote.port=3333
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
Я исправил проблему, запустив VisualVM из Cygwin. Если вы предпочитаете не выполнять профилирование с использованием удаленного соединения JMX, вы можете запустить и VisualVM, и вашу Java-программу, используя Cygwin:
Откройте окно консоли Cygwin, перейдите к visual_vm.exe и запустите этот файл из среды Cygwin.
VisualVM может автоматически обнаруживать локальные приложения, работающие под тем же пользователем. Таким образом, одним из объяснений может быть то, что процесс cygwin выполняется под другим пользователем. Убедитесь, что и VisualVM, и отслеживаемое приложение работают под JDK 6, обновление 25. В JDK 6, обновление 25 есть исправление для следующей ошибки JDK # 6938627, которая может повлиять на ваш случай.
Противоположный подход к ответу @seanhodges - запустить приложение для отладки с измененной средой, указав его обратно в каталог Windows User Temp.
Например, если вы обычно делаете:
./gradlew run
И скажите, что ваш каталог TEMP в Windows (в соответствии с вашими переменными среды пользователя):
T:\Temp
Вместо этого вы можете сделать одно из следующих действий:
TMP=T:\\Temp ./gradlew run
TMP=/cygdrive/t/Temp ./gradlew run
(похоже, они оба работают)