VisualVM "не поддерживается для этой JVM" во всех локальных приложениях?

Я уже потратил много времени на загрузку и тестирование своего приложения, теперь мне нужно его профилировать. Но, к несчастью, VisualVM всегда говорит "не поддерживается для этой JVM" в моих локальных приложениях?

Приложения были запущены на одной JVM с помощью VisualVM.

Ответ 1

Я узнал, что (по крайней мере, под Windows) можно легко написать небольшие пакетные файлы для запуска VisualVM в сочетании с определенными JVM, что важно для меня, так как я установил 32-битный JDK вместе с 64-битным JDK (мне нужно оба, так что это разумно для меня). Я создал два пакетных файла в папке "S:\applications\visualvm\bin \":

run_32.bat:

@echo off
START "VisualVM 32" visualvm.exe --jdkhome "C:\Program Files (x86)\Java\jdk1.7.0_07"

run_64.bat:

@echo off
START "VisualVM 64" visualvm.exe --jdkhome "C:\Program Files\Java\jdk1.7.0_07"

Очевидно, что все пути могут отличаться в вашей системе, но общая идея должна работать корректно (на всех 64-битных версиях Windows). Преимущество в том, что я могу использовать 32-битный пакетный файл, когда я хочу использовать VisualVM в сочетании с Java-приложениями, которые работают на 32-битной JVM и т.д. Для 64-битных.

Команда "start" имеет единственное преимущество, что пакетный файл запускает приложение, не дожидаясь его завершения, поэтому окно командной строки немедленно закрывается. Это не функция VisualVM, а интерпретатор пакетного файла Windows.

Ответ 2

VisualVM необходимо запускать с тем же JVM - по крайней мере, с Java 6 с тем же 32-битным/64-битным размером - в качестве профилируемой программы. (Вы также должны быть одним и тем же пользователем, но тогда это сообщение не применяется).

Я бы трижды проверил, что это была то же самое JVM в вашей ситуации.

Ответ 3

В моем случае даже с совпадением JVM (как с 64-битным), единственным способом получить работу является отправка аргумента -Dcom.sun.management.jmxremote в JVM для мониторинга. Это также работает, если у вас возникли проблемы с подключением через Java Mission Control (JMC).

Согласно документации JMX, это то, что делает аргумент:

Настройка этого свойства зарегистрировала платформу Java VM платформы MBeans и опубликовала соединитель удаленного вызова метода (RMI) через частный интерфейс, чтобы позволить клиентским приложениям JMX отслеживать локальную платформу Java, то есть виртуальную машину Java, работающую на том же компьютере, что и клиент JMX.

Это должно было быть включено автоматически, но по какой-то причине это не было на моем Linux.

Ответ 4

В Linux: Убедитесь, что ваш /etc/hosts правильно ссылается на эффективный IP-адрес вашего "имени хоста", Похоже, что несоответствие здесь полностью смущает бедных jvisualvm и его программистов.

Ответ 5

Я также встретил эту проблему. Мое дело в том, что на linux я начал tomcat с tomcat_user, но я запускаю jvisualvm с пользователем root. Он работает после запуска tomcat с пользователем root.

Ответ 6

Как вы можете видеть, вы запускаете VisualVM на 32-битной JVM

Вам не нужно unistall 32bit JVM. Просто скажите VisualVM использовать тур 64bit JVM.

Если вы хотите изменить его навсегда, вы можете редактировать

в visualvm_13\etc\visualvm.conf и укажите здесь путь jvm

Ответ 7

Проблема, которую я только что нашел, благодаря подсказке от пользователя @user3356656, заключается в том, что если вы запустите программу, пока ваш компьютер находится на одном IP-адресе, а затем попытайтесь подключиться, когда он находится на другом IP-адресе, он будет терпеть неудачу.

Ответ 8

У меня возникла проблема с обнаружением visualvm моей локальной установки tomcat в Windows 7. Я мог подключиться вручную, но тогда такие вещи, как моментальные снимки памяти и плагин visualgc, не были включены. Я подтвердил, что использовал одну и ту же версию JVM, временные файлы и т.д. Не работал. Затем я обнаружил, что сначала начал visualvm, а затем tomcat, решил проблему.

Ответ 9

Я могу воспроизвести следующее поведение. У меня есть java-приложение, которое можно щелкнуть правой кнопкой мыши, чтобы открыть jvisualvm. Я запускаю это приложение Java как автономную настройку из файла bat. Это означает, что я изменяю% path% и другие необходимые переменные среды, такие как JDK соответственно, чтобы сформировать мою среду. БАТ, который запускает приложение, помечен как не-админ. Окружающая среда указывает на 64-битный JDK. Затем я запускаю другое приложение java в качестве администратора. VM живет от одного и того же 64-битного JDK-источника. Затем я запускаю jvisualvm из первого приложения с помощью правого клика ie.as non-admin. Я вижу приложение в списке приложений "jvisualvm", но при нажатии "Свойства системы" выдает ошибку. Сообщение "Не поддерживается для этой JVM". Экспортируются аргументы JVM.

Решение похоже на некоторые другие предыдущие комментарии: Начиная свой правый клик jvisualvm-starter в качестве администратора, я вижу также "свойства системы". Конечно, если JDK будут 32-битными и другие 64-битные, это не сработает. были там.

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

Ответ 10

Я изменил имя на моего пользователя Windows и установил его в нижнем регистре, перезапустил мой компьютер, и теперь все работает.

Ответ 11

У меня тоже такая же проблема для локального tomcat, я ищу решения для stackoverflow. после некоторой серьезной отладки я понял, что у VisualGC нет разрешений на получение информации GC из файла tool.jar.

по ссылкам

http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstatd.html#SECURITY fooobar.com/questions/163590/...

Я выполнил следующие шаги для решения проблемы

1) Создайте файл разрешений

vim /tmp/tools.policy

Добавить

grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};

сохранить

2) Теперь добавьте /tmp/tools.policy к параметрам запуска JVM

-Djava.security.policy=/tmp/tools.policy

3) Запустите jvisualVm с sudo

Ответ 12

Моя проблема заключалась в оптимизации JVM - флаг -XX:+PerfDisableSharedMem нарушит работу VisualGC. Это очевидно, если jps не покажет ваше приложение в списке.

Ответ 13

Для меня причина в том, что я запускал "jstatd" с другим пользователем с процессом JVM. У меня есть специальный пользователь в Linux, чтобы запустить поток JVM (это tomcat), но я запускаю процесс jstatd с помощью root. Если вы используете root для запуска jps, вы не видите никакой информации о потоках JVM, принадлежащих другим пользователям. В этом проблема. Я убил процесс "jstatd" , запущенный с помощью root, su для владельца процесса JVM и перезапустил процесс "jstatd" , и теперь все будет хорошо.