Не поддерживается для этой JVM при попытке подключения к удаленному узлу в VisualVM.

После успешного подключения VisualVM к удаленному хосту я продолжаю получать метку «Не поддерживается для этой JVM» на панели ЦП, в свойствах системы и т. д. Кроме того, похоже, у меня нет доступа к панели «Потоки», которая мне нужна в чтобы делать дампы потоков.

Я пытался запустить 32- и 64-битные версии VisualVM как с JDK7, так и с JDK8 (целевой процесс выполняется на машине Linux в 64-битном режиме). Проблема кажется одинаковой в обоих случаях для конфигураций VisualVM.

Вот что java -version дает мне на этой машине:

java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)

Есть ли что-то, что я должен принять во внимание, или есть какие-то ограничения при удаленном доступе?


person devoured elysium    schedule 13.04.2016    source источник
comment
Для удаленных JVM работают только функции, реализованные поверх JMX API. Для локальных JVM VisualVM использует Attach API. который позволяет загружать произвольный код/агенты Java в подключенную JVM.   -  person Holger    schedule 13.04.2016
comment
Как подключиться, чтобы удалить JVM? Вы используете JMX или jstatd?   -  person Tomas Hurka    schedule 06.05.2016


Ответы (2)


Это не означает JVM, которую вы используете для запуска VisualVM, когда он говорит «Не поддерживается для этой JVM», это означает виртуальную машину удаленного сервера.

Вероятно, вы используете виртуальную машину без Oracle (возможно, openjdk), и в этом случае VisualVM не может работать должным образом. Либо перейдите на Oracle JRE на сервере, либо получите профилировщик, который также может обрабатывать OpenJDK.

person Kayaman    schedule 13.04.2016
comment
О, я не ожидал этого. Я проверю это. - person devoured elysium; 13.04.2016
comment
На самом деле, это, похоже, не проблема. Смотрите отредактированный ОП. - person devoured elysium; 13.04.2016
comment
Я пробовал запускать jmap и jstack, и все, что я получаю, это «Операция не разрешена». Я начинаю думать, что все это может быть связано с разрешениями? - person devoured elysium; 13.04.2016
comment
Ну может быть. Вы через JMX подключаетесь нормально? - person Kayaman; 13.04.2016

Когда вы подключаетесь к удаленной JVM, VisualVM обычно общается через интерфейс JMX, чтобы получить потоки и т. д. Однако удаленная JVM решает, что она сделает доступной для клиента, а не все, что доступно по умолчанию; поэтому возможно, что JVM, к которой вы подключаетесь, просто не поддерживает отчеты по этим характеристикам.

Предполагая, что соединение работает правильно, вы обнаружите, что существуют различные isXxxSupported методы, возвращаемые JVM, в данном случае, возможно, ложные.

Одна вещь, которую вы можете попробовать, это запустить jcmd на удаленном сервере (или jps), чтобы увидеть, есть ли какие-то ограничения на процессы в поле, которые мешают вам видеть другие виртуальные машины как этого пользователя. Возможно, если он работает в чем-то вроде контейнера, то вызовы RMI для JMX не проходят, или если вы работаете в политике безопасности selinux или Java, которая не позволяет вам читать/общаться на сетевые порты или файлы.

JMXServiceURL url = new JMXServiceURL("rmi", "", 0, "/jndi/rmi://" + host + ":" + port + "/jmxrmi");
JMXConnectionFactory factory = JMXConnectorFactory.connect(url);
MBeanSearverConnection conn = factory.getMBeanServerConnection();
ThreadMXBean threads = ManagementFactory.newPlatformMXBeanProxy(conn, ManagementFactory.THREAD_MXBEAN_NAME,ThreadMXBean.class);
long ids[] = threads.getAllThreadIds();

Если вы можете получить идентификаторы потоков, это предполагает, что вы можете поговорить с сервером; в threads есть и другие методы, которые позволят вам получить трассировку стека и т. д. Это будет метод, используемый VisualVM, и он может позволить вам выполнять дальнейшую отладку в отношении того, что происходит не так в ответах.

person AlBlue    schedule 13.04.2016
comment
Ваш код показывает, как установить соединение JMX, которое не имеет ничего общего с JVMTI. Поскольку OP может подключаться к удаленной JVM, JMX работает. - person Holger; 13.04.2016
comment
Вы правы - извините, исправил ссылку JVMTI на JMX. Вопрос заключался в том, поддерживает ли удаленная JVM возможность получения потоков или нет, что VisualVM делает скрытно. Код поможет определить, связана ли проблема с разрешением или чем-то еще, а не только с возможностью установления соединения JMX. - person AlBlue; 13.04.2016