Получить дамп кучи из удаленного приложения на Java с помощью JVisualVM - PullRequest
10 голосов
/ 07 апреля 2009

Я запускаю JVisualVM (Windows XP, Sun Java 1.6.0.13, 32-разрядная клиентская виртуальная машина) для мониторинга удаленного приложения (Linux, Sun Java 1.6.0.07, 64-разрядная серверная виртуальная машина). Перед запуском фактического удаленного приложения я запускаю на удаленном компьютере jstatd, используя политику полного доступа:

grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};

Затем я запускаю само приложение, используя командную строку

 java -Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.port=3333 
compileTest.Main

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

Как получить дамп кучи из удаленно отслеживаемого приложения с использованием JVisualVM?

Я пытался использовать jConsole. С помощью jConsole можно создать дамп кучи distant , используя операцию dumpHeap com.sun.management.HotSpotDiagnostic. Я хочу, чтобы дамп передавался на клиентскую сторону и анализировался с помощью инструментов, предоставляемых JVisualVM. Как я могу это сделать?

Ответы [ 4 ]

7 голосов
/ 06 мая 2009

Есть способ сделать это!

  1. rmiregistry -J-Xbootclasspath / p: $ JAVA_HOME / lib / sa-jdi.jar (используется порт 1099)
  2. запустить 'jsadebugd' на машине, на которой запущено приложение: jsadebugd & (pid of JVM)
  3. На удаленной машине используйте следующие jmap -dump: file =: 1099

  4. Jhat

Выше запустится веб-приложение на порт 7000

Все вышеперечисленные инструменты являются частью JDK 1.6

Всего наилучшего!

3 голосов
/ 01 мая 2009

К сожалению, нет автоматизированного способа сделать это. Вам нужно будет запустить jmap вручную на сервере Linux, чтобы создать дамп кучи вашей JVM, а затем скопировать результирующий дамп кучи на локальный компьютер с JVisualVM и использовать File | Load ..., чтобы загрузить дамп кучи в JVisualVM для анализа.

2 голосов
/ 02 апреля 2012

Начиная с версии 1.3, VisualVM поддерживает удаленные дампы кучи:

Начиная с VisualVM 1.3, теперь вы можете использовать действия и кнопки «Дамп кучи» в инструменте, чтобы получить дамп кучи приложений, запущенных удаленно. При вызове отображается диалоговое окно, которое позволяет вам указать полный путь в удаленной системе, куда вы хотите выгрузить кучу. После создания дампа кучи необходимо вручную скопировать файл на локальный компьютер и использовать действие «Загрузить», чтобы открыть и проанализировать файл с помощью VisualVM.

См .: Выпущено VisualVM 1.3

0 голосов
/ 25 апреля 2009

Вы не можете анализировать кучу удаленно. Вы можете запустить visualvm на своем сервере и экспортировать сеанс x на локальный компьютер. На вашем сервере должен быть установлен x11, чего нет на многих серверах.

...