Почему VisualVM Profiler не профилирует мое приложение?

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

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

Я дважды щелкаю на этом приложении и перехожу на вкладку Profiler.

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

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,

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

7 ответов

Решение

Я предполагаю, что проблема связана с приложением, запускаемым из 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's temp directory] явно сказать ему, где эти данные.

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

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

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

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

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

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

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

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

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

Я просто остановил программу и добавил следующий параметр в Конфигурации запуска программы (Конфигурации запуска -> Аргументы -> Аргументы виртуальной машины)

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

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

Затем простой перезапуск VisualVM сделал свое дело.

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

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

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

Поэтому, когда я запустил VisualVM, он не мог получить информацию о процессе Java.

Я решил это, запустив jetty с опцией -Djava.io.tmpdir=C:/temp/java.

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

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

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

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

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

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