Локальные процессы 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, так как это может быть проблемой с разрешениями. Исправил эту проблему для меня