VisualVM показывает «Не поддерживается для этой JVM» - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь профилировать удаленную JVM с помощью VisualVM 1.4. Я использую macOS High Sierra 10.13.6 локально со следующей версией OpenJDK:

java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.181-b13, mixed mode)

Сервер запускает Debian Stretch со следующим OpenJDK:

java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-2~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

Когда я наблюдаю за процессом JVM локально, я вижу все эти вкладки, и профилирование работает отлично.

enter image description here

Однако, если я делаю это удаленно, я вижу что-то вроде этого:

enter image description here

Обратите внимание на окно ЦП с надписью «Не поддерживается для этой JVM» и сокращенные вкладки, не включая «Профилировщик». Однако, как вы видите, я вижу некоторые данные.

Я подключаюсь через jstatd. На сервере, следуя этой статье , я запускаю

jstatd -J-Djava.security.policy=/home/brandwatch/jstatd.all.policy -J-Djava.rmi.server.hostname=10.2.156.160 -Djava.rmi.server.logCalltrue

Ответы, подобные this , указывают, что это может быть связано с различными версиями JVM, однако моя версия выглядит одинаково, несмотря на то, что одна из них работает на MacOS, а другая на Debian.

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Отсутствующая информация об использовании процессора не имеет ничего общего с различными версиями JDK.Вы не видите данных об использовании процессора, потому что jvmstat (экспортированный через jstatd) не предоставляет такую ​​информацию.Если вы хотите увидеть использование процессора, вам нужно использовать соединение JMX.JMX также позволит вам выполнять выборку процессора и памяти.Профилирование поддерживается только для локальных приложений.

0 голосов
/ 14 марта 2019

Поскольку, как правильно указывает ответ Томаса Хурки, удаленное профилирование не работает с VisualVM, я использовал небольшой взлом, чтобы все еще заставить его работать: я установил VisualVM на удаленный сервер и получил к нему доступ через X-forwarding.Таким образом, VisualVM может получить доступ к процессу локально и таким образом профилировать его.

  1. ssh на сервер с флагом -X

    ssh -C -X <user>@<host>

  2. загрузить [VisualVM 1.4] [8]

    wget https://github.com/visualvm/visualvm.src/releases/download/1.4/visualvm_14.zip

  3. распаковать архив

    unzip visualvm_14.zip

  4. запустить VisualVM

    ./visualvm_14/bin/visualvm

Через несколько секунд вы увидите всплывающее окно VisualVM.Это не очень быстро (только потому, что x-forwarding нет), но для моего случая использования все было в порядке.

Другим способом достижения этого может быть использование VNC, но я не пробовал этого.Недостатком было бы то, что вам нужно установить все пакеты рабочего стола, которые могут не захотеть работать на сервере.

...