Локальные процессы Java недоступны при попытке подключения через JMX

Я запускаю несколько Java-процессов на компьютере с Windows XP Professional. Когда я пытаюсь подключиться к этим процессам через локальную JConsole, процессы отображаются серым цветом.

Однако я могу запустить те же процессы на другом компьютере и подключиться через локальную JConsole на этом компьютере.

Обе машины работают под управлением версии Java 1.6 для процессов и jconsole.

Есть идеи, почему эти процессы неактивны?

10 ответов

Я борюсь с этой проблемой прямо сейчас, и я нашел решение вокруг:

Вы можете изменить временный каталог локального пользователя на что-то, к чему он может определенно получить доступ (например, D:\temp). Обязательно сделайте это для процесса, который вы пытаетесь отслеживать, и для процесса jconsole.

Другая вещь, которая может вызывать проблемы, это имена пользователей с заглавными буквами в них. Каталог всегда будет создаваться со всеми строчными буквами, но простое переименование его в точном соответствии с тем, как оно отображается в диспетчере задач, устраняет все проблемы: http://planeofthought.com/wp/?p=75

Если процессы выполняются от имени другого пользователя (например, если вы запускаете их как службы), вы не сможете подключиться к ним. Кроме того, если они работают под управлением более ранней версии jvm, вы, скорее всего, не сможете общаться с ними.

в некоторых случаях локальный механизм связи jmx использует локальную файловую систему и может иметь проблемы, если разрешения не определены правильно. Возможно, вы выполняете какой-либо из этих процессов в сетевых файловых системах (nfs, samba)?

Скажите, что ваше имя пользователя Windows, которое вы используете для запуска Java-приложения в диспетчере задач, - YOUR_USER_NAME. Пожалуйста, проверьте папку, имя которой выглядит как hsperfdata_XXXXX (XXXXX должно быть вашим именем пользователя) во временной папке, и убедитесь, что YOUR_USER_NAME и XXXXX абсолютно одинаковы (будьте осторожны с прописными и строчными буквами).

С http://download.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html:

Приложения, которые нельзя подключить, с отключенным агентом управления. К ним относятся приложения, запущенные на платформе J2SE 1.4.2 или запущенные на платформе J2SE 5.0 без -Dcom.sun.management.jmxremote или же com.sun.management.jmxremote.port опции. Эти приложения отображаются серым цветом в таблице, и JConsole не может подключиться к ним. В диалоговом окне примера подключения, показанном на рисунке 3-1, приложение Anagrams было запущено с виртуальной машиной платформы J2SE 5.0 без каких-либо свойств управления для включения агента JMX, и, следовательно, отображается серым цветом и не может быть выбрано.

http://download.oracle.com/javase/6/docs/technotes/guides/management/figures/connect.gif

Несмотря на то, что написано в документации, скорее всего, ваш процесс выполняется под другим пользователем. Вы можете запустить jconsole как администратор и попробуйте потом.

Вот что сработало для меня. Я изменил свой %TEMP% а также %TMP% переменные среды, чтобы указать на папку, которую я создал в моем %HOME% местоположение (как C:\Users\[YOUR_NAME]\Temp). Как только я это сделал, все проблемы исчезли.

У меня была проблема, как описано ранее, но мне посоветовали более простое решение: просто закройте все программы, использующие Java ("IntelliJ IDEA", "SoapUI" и т. Д., Чтобы разблокировать временную папку), а затем удалите %TMP%\hsperfdata_<user.name> папка. Затем, после открытия любой Java-программы, эта папка будет воссоздана, но на этот раз с правильным именем (скорее всего %TMP%\hsperfdata_<User.Name>). И после этого локальные процессы Java можно отслеживать через "JConsole" или "VisualVM" (теперь снова запускается без запуска со ссылкой на VisualVM: Руководство по устранению неполадок).

Вместо этого вы можете просто зайти в CMD и набрать jconsole.exe (PID)

Не забудьте перейти по пути, где присутствует jconsole, а затем запустить исполняемый файл.

Измените имя папки hsperfdata, которая для меня была найдена в C:\Users\pmimgg0\AppData\Local\Temp\hsperfdata_pmimgg0, чтобы соответствовать имени пользователя, найденному в диспетчере задач. Как только я изменил hsperfdata_pmimgg0 на hsperfdata_PMIMGG0, мой локальный процесс больше не выделялся серым цветом на jconsole.

Лучший способ - запустить локальный процесс как удаленный .

Добавьте эти условия в аргументы времени выполнения -

      -Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=6001
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=localhost
-Dcom.sun.management.jmxremote.rmi.port=6001

Затем выберите Remote Process и укажите на localhost: 6001, как показано.

Нажмите «Подключиться», и Jconsole будет успешно подключена.

Для меня это исправлено, поскольку у меня были некоторые ограничения администратора.

Измените ваши пути TEMP в переменных среды на что-то вроде D:\temp, так как это может быть проблемой с разрешениями. Исправил эту проблему для меня

Другие вопросы по тегам