VisualVM не может сэмплировать память - PullRequest
25 голосов
/ 10 января 2012

У меня есть экземпляр tomcat с настроенным параметром JMXRemote. Локальный VisualVM может получить сэмплер на процессоре, но не для памяти. Кнопка памяти выделена серым цветом с кратким изложением: «Выборка памяти: недоступна. Невозможно подключиться к целевому приложению. Убедитесь, что приложение работает на поддерживаемом JDK 6 или JDK 7»

Параметр JMXRemote:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9086
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

Версия Tomcat JDK:

JDK1.6.0.30

Версия VisualVM:

Version: 1.6.0_30 (Build 1320-110325); platform 110131-9c8b3bfb3a1e
System: Windows Server 2008 R2 (6.1) , amd64 64bit
Java: 1.6.0_30; Java HotSpot(TM) 64-Bit Server VM (20.5-b03, mixed mode)
Vendor: Sun Microsystems Inc., http://java.sun.com/
Environment: Cp1252; en_US (visualvm)
Userdir: C:\Users\Administrator\AppData\Roaming\.visualvm\7
Clusters: C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\platform
C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\visualvm
C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\profiler

Версия Tomcat:

Tomcat 6.0.32

Я использую VisualVM и Tomcat на Win Server 2008. Что-то я не так сделал?

Ответы [ 10 ]

7 голосов
/ 23 апреля 2013

У меня была такая же проблема раньше.Вы, должно быть, скачали версию с домашней страницы jvisualvm, верно? Не делайте этого! Если вы используете новый jdk 1.7, VisualVM уже упакован в вашу папку jdk.Используйте эту версию, у вас не будет проблем с образцом памяти.

5 голосов
/ 23 августа 2012

Это сообщение в блоге наводит меня на мысль, что временные каталоги JVisualVM и Tomcat должны быть одинаковыми для работы выборки памяти. Один из комментариев к посту:

В качестве временного каталога должен быть указан каталог, используемый JVisualVM, который можно найти на вкладке системных свойств VisualVM (java.io.tmpdir). Как только я правильно установил каталог CATALINA_TMPDIR, все заработало прекрасно.

1 голос
/ 19 апреля 2018

Я только что столкнулся с той же самой проблемой, и ответы выше решили мою проблему, но мне потребовалось некоторое время, чтобы понять, как. На тот случай, если у кого-то еще возникнут проблемы, и он окажется так далеко внизу, я использовал JDK, который является частью сервера weblogic, настроенного через Eclipse, а не JDK, который я установил отдельно. Я все еще младший программист, и я не соединял 2 и 2, пока не начал просматривать свои настройки затмения и проверял свои Установленные JRE.

Запустил jvisualvm.exe из weblogic jdk и все заработало.

1 голос
/ 10 января 2012

Я бы проверил, что версия VisualVM точно такая же, как и у JVM.

VisualVM очень зависит от версии.Я предполагаю, что это все еще в довольно быстром развитии.

(Повторно опубликовано как ответ, так как это может быть решением)

0 голосов
/ 05 октября 2018

Во-первых, JMX должен быть включен . Добавьте связанные переменные среды командной строки, необходимые для активации JMX, если у вас их нет.

Переменная среды CATALINA_TMPDIR должна быть настроена так, чтобы соответствовать JVisualVM, как показано на вкладке «Свойства системы» в Local> VisualVM. Вы можете открыть его, дважды щелкнув на записи VisualVM на панели приложений слева.

Переменные среды могут быть установлены путем поиска среды, «редактировать переменные среды для вашей учетной записи». Новый ...> Введите имя и значение.

enter image description here

Если вы хотите, чтобы временный каталог VisualVM находился где-то еще, вам придется запустить VisualVM из командной строки и добавить аргумент.

C:\Program Files\Java\jdk1.8.0_65\bin>jvisualvm.exe -J-Djava.io.tmpdir=C:\Users\You\Temp
0 голосов
/ 21 марта 2014

У меня та же проблема, но с другой средой. Мой сервер был машиной Linux, клиент - машиной Windows 7, но проблема та же.

Решением было запустить jvisualvm на той же машине и с тем же пользователем, на котором запущено целевое приложение. Если я запускаю jvisualvm с другим пользователем (например, root), кнопка памяти становится серой.

0 голосов
/ 07 февраля 2014

И у меня такая же проблема.

Я всегда запускал tomcat как сервис и связывал его с visualvm через соединение jmx.

Когда был исправлен catalina.bat:

    set JAVA_OPTS=%JAVA_OPTS% 
    -Dcom.sun.management.jmxremote=true 
    -Dcom.sun.management.jmxremote.port=9090 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.authenticate=false

и запустил его с помощью startup.bat, visualvm автоматически определил tomcat, и выборка памяти была активной.

0 голосов
/ 04 июля 2013

Убедитесь, что ваш VirtualVM / JDK является 32-битной копией, если это JRE.Если вы используете Eclipse, проверьте выбранную JRE в разделе «Установленная JRE».

0 голосов
/ 02 мая 2013

Вот мое решение для аналогичной проблемы: https://stackoverflow.com/a/16330238/715483

Эту ошибку можно устранить с помощью

$ ssh -Y user @ remotemachine

$ wget http://java.net/projects/visualvm/downloads/download/release135/visualvm_135.zip

$ unzip visualvm_135.zip

$ cd visualvm_135 / bin

$ ./visualvm

Этот экземпляр visualvm будет полнофункциональным, включая выборку памяти и ЦП.

Подробнее об этом здесь: http://shahriarinia.blogspot.com/2013/05/java-cpumemory-heap-usage-monitoring.html

http://mshahriarinia.com/

0 голосов
/ 10 января 2012

Я сталкивался с подобными проблемами с JVisualVM, я даже задавал вопрос об этом здесь

Несколько идей / советов:

  1. Итак, для выборки памяти вам не нужны параметры jmx.
  2. Я бы дважды проверил, установлены ли у вас 64-битные jvms вместе с 32-битными jdks на той же машине (даже если онине работает, и все среды определены правильно), я где-то читал, что иногда это сводит JVisualVM с ума :) (да, я знаю, это не звучит разумно для нас, разработчиков Java)

  3. Если это не работает, просто удалите все имеющиеся у вас jdks и установите только 1, который вам нужен.Это может решить проблему.

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

...