Подтвердить что ты не робот

Почему приложение VisualVM Profiler не будет использовать мое приложение?

Я создал простое приложение с 1 файлом java, которое выполняет итерацию через цикл, вызывает некоторые функции, выделяет некоторую память, добавляет некоторые числа и т.д. Я запускаю это приложение через eclipse Run As->Java Application.

Запустившееся приложение отображается в Java VisualVM под Local.

Я дважды нажимаю на это приложение и перехожу на вкладку "Профайлер".

Настройки по умолчанию:

Start profiling from classes: my.main.package.**

Do not profile classes: java.*, javax.*, sun.*, sunw.*, com.sun.*

Я нажимаю CPU. Кнопки CPU и Memory серого цвета. Ничего не происходит.

Status говорит profiling inactive.

Когда мое приложение завершает Status говорит application terminated.

Что я здесь делаю неправильно? Есть ли какие-то настройки, которые мне нужно настроить? Нужно ли устанавливать флаг VM при запуске приложения?

4b9b3361

Ответ 1

Я бы предположил, что проблема связана с запуском приложения из Eclipse, это связано с тем, что JVisualVM ожидает найти данные в каталоге java.io.tmpdir (обычно C:\Users\[your username]\AppData\Local\Temp\hsperfdata_[your username] в системе Windows).

Я предполагаю, а не в обычном месте, где JPS, JVisualVM и т.д. ожидает его, Eclipse помещает данные в свою собственную временную папку?

Если это так, попробуйте вызвать JVisualVM с помощью jvisualvm -J-Djava.io.tmpdir=[Eclipse temp directory], чтобы явно указать, где находятся эти данные.

Если вы не можете найти папку hsperfdata_$USER, попробуйте запустить приложение вне Eclipse в обычной командной строке Java.

Также обратите внимание, что произошла ошибка, влияющая на временную папку (чувствительность к регистру), введенную около 1.6.0_23, так что, возможно, вам будет полезно обновить более новую версию Java 6 (или 7)?

Ответ 2

У меня была такая же проблема после обновления java 1.7.0_45. Мне пришлось удалить следующую папку:

C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'

После этого все работает как шарм.

Ответ 3

У меня была такая же проблема, но со следующими симптомами:

Я начал причал, с рабочим каталогом в C:\Users\t852124\AppData\Local\Temp

Jetty создавал каталог hsperfdata_, но не устанавливал в нем идентификатор process

Итак, когда я начал visualVM, он не смог получить информацию о процессе java.

Я решил это, отправив причал с параметром -Djava.io.tmpdir = C:/temp/java.

Теперь, когда я начал причал, идентификатор процесса был создан как файл в каталоге hsperfdata_. Поэтому, когда я начал visualVM, он смог увидеть мой локальный процесс Java

Ответ 4

Микавели, Куба и Сомайя Кумбер предоставили отличные решения. Просто добавив, что я сделал, чтобы все работало.

Я сначала проверил местоположение C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'

Не было файла с именем процесса моей программы, запущенной внутри eclipse.

Я просто остановил программу и добавил следующий параметр в Run Configurations программы (Запустить конфигурации → Аргументы → Аргументы VM)

-Djava.io.tmpdir=C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'

Я снова начал программу. Все еще не удалось его прокомментировать. Но теперь у меня есть файл, созданный для процесса в заданной директории temp.

Тогда простой перезапуск VisualVM сделал трюк.

Ответ 5

В Linux с VisualVM 1.3.3 мне нужно удалить локальные настройки приложения в ~/.visualvm/1.3.3/, чтобы включить прокси-сервер и прокси-сервер CPU.

Также обратите внимание, что /usr/bin/jvisualvm содержит hardcoded путь к OpenJDK (устанавливается с переменной jdkhome), что, по-видимому, вызывает множество проблем, сравнивая с запуском на Oracle JDK 1.7.

Ответ 6

У меня была такая же проблема, и работа с VisualVM с повышенными привилегиями (правами администратора) решила проблему.

Ответ 7

Также обратите внимание, что если ваше приложение использует недавнюю не-Oracle JVM, вам может потребоваться загрузить "bleeding edge" VisualVM из github.

Например, VisualVM в комплекте с JDK 1.8.0.111, похоже, не работает с JVM IBM 1.8. Возможно, IBM JVM была просто выпущена после JVM Oracle 1.8, поэтому включение необходимых изменений в это время было невозможным.