Отсутствующие функции Java VisualVM

У меня есть приложение Java, и я хочу отслеживать его с помощью Java VisualVM (jvisualvm).

Однако в окне VisualVM можно увидеть очень мало данных. Кроме того, я не могу получить дамп кучи.

Вот скриншот того, как это выглядит, с другим тестовым приложением, которое я написал:

скриншот

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

Я попытался добавить -Dcom.sun.management.jxmremote к аргументам виртуальной машины, как описано здесь. Это отображается в окне сведений об установке. Однако он не отображается в аргументах процесса Java. (должно?)

скриншоты

Я также пытался нажать кнопку в своем тестовом приложении, пока не произошло OutOfMemoryError. Нет дампа кучи; это не странно, так как Heap Dump в OOME отключен.

Что я мог сделать, чтобы решить эту проблему?


person PurkkaKoodari    schedule 14.12.2013    source источник
comment
Вы можете сделать дамп кучи в визуальной виртуальной машине.   -  person assylias    schedule 14.12.2013
comment
Я говорю, что кнопка Heap Dump работает. Однако обратите внимание, что для больших куч (скажем, › 500 МБ/1 ГБ) это займет некоторое время. Вы можете попробовать это с небольшой кучей, чтобы убедиться, что это работает.   -  person assylias    schedule 14.12.2013
comment
@assylias Как вы, вероятно, видите на картинке, кнопка отключена, выделена серым цветом, не включена, как бы вы ее ни называли. Вы даже не можете щелкнуть по нему, поэтому я не понимаю, как это работает.   -  person PurkkaKoodari    schedule 14.12.2013
comment
О, я вижу. Он включается, когда я пытаюсь - глупый вопрос, но: ваша программа все еще работает, когда вы пытаетесь сделать дамп кучи, верно? Какую версию jdk вы используете?   -  person assylias    schedule 14.12.2013
comment
@assylias Программа запущена (на картинке рамка :D). Я использую Java 7, обновление 45.   -  person PurkkaKoodari    schedule 14.12.2013
comment
Вам также не хватает анализа использования ЦП. Может быть, это потому, что вы запускаете свое приложение из eclipse? Возможно, стоит попробовать запустить ваше приложение из командной строки, чтобы увидеть, есть ли разница. Если нет, то я не знаю, что происходит - никогда не было такой проблемы.   -  person assylias    schedule 14.12.2013
comment
@assylias Пробовал запускать из командной строки, безрезультатно.   -  person PurkkaKoodari    schedule 15.12.2013


Ответы (2)


У меня была эта проблема, потому что я запускал JVisualVM из другой установки JRE/JDK, чем целевой процесс. Кажется, что они должны поступать из одного и того же места, иначе кнопка Heap Dump становится серой.

person Dobes Vandermeer    schedule 24.09.2015

Кажется, была проблема с разными версиями Java.

Короче говоря: если JDK устарел, переустановите его и удалите исполняемые файлы Java из C:\Windows\System32 и C:\Windows\SysWOW64.

Во-первых, я хочу вам сказать, что у меня на компьютере установлено несколько версий Java. Мой JDK 32-битный, потому что некоторые драйверы не работают с 64-битной Java. Кроме того, у меня установлены как 32-битная, так и 64-битная JRE, последняя для лучшей производительности для игр Java.

Мой JDK был версии 7, обновление 40. VisualVM был такой же версией. Однако моя JRE с автоматическими обновлениями была версии 7, обновление 45.

java -version сказал мне, что это версия 45 (а она была), так что я не думал, что проблема в этом.

Затем я проверил версии через панель управления. Теперь я знал, что мой JDK устарел, поэтому я удалил его и заново загрузил.

Удаление удаленной Java из системного пути, поэтому jvisualvm не запускается. Я добавил его в путь. Теперь и приложение, и VisualVM работали нормально, но проблема осталась.

Последняя проблема заключалась в том, что система использовала java.exe из C:\Windows\System32 вместо JDK. По дате это казалось самым последним, но, возможно, JRE была установлена ​​​​в другом месте, чем VisualVM (= JDK).

Наконец, я просто удалил исполняемые файлы Java как в C:\Windows\System32, так и в C:\Windows\SysWOW64.

person PurkkaKoodari    schedule 15.12.2013
comment
Я думаю, это можно резюмировать следующим образом: вы запускали visualvm с помощью jre, тогда как вы должны были использовать jdk (тот самый, в который установлен visualvm). - person eis; 15.12.2013