Запись событий приложения на удаленном Docker из текущей системы с использованием параметров командной строки JMC - PullRequest
0 голосов
/ 08 ноября 2019

По сути, я хотел бы записать события приложения (данные JFR), запущенные на докере из моей текущей системы JMC.

Выполнены следующие шаги:

  1. Включен порт JFR в моей службе докера.
  2. Проверено, могу ли я получить доступ к порту JMS докерской службы из моей текущей системы, и он работает отлично.
  3. , когда я пытался записать событие приложения из приложения JMC, я 'Я получаю правильные данные в дампе, но когда я пытался сделать то же самое, используя параметры командной строки, я не получаю правильный дамп.
  4. Как часть проекта, у нас есть командный файл, который вызывает приложение изнутримероприятие. Я создал локальный jar-файл, который будет вызывать командный файл и запускать опцию командной строки JFR для этого jar-файла, но все же я не получил правильную информацию. в файле дампа.

Кто-нибудь дает какие-либо предложения.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

Вот фактический процесс, которому я следовал.

  1. у нас есть пакетный файл для запуска событий приложения на нашем Docker.
  2. Я подготовил Java-программучтобы запустить этот конкретный пакетный файл и сгенерировать исполняемый jar-файл.
  3. Теперь я вызвал этот конкретный jar-файл с помощью команды JFR, чтобы получить дамп этого события приложения в моей системе следующим образом:

    -XX: + UnlockDiagnosticVMOptions -XX: + DebugNonSafepoints -XX: + UnlockCommercialFeatures -XX: + FlightRecorder -XX: StartFlightRecording = задержка = 20 с, длительность = 60 с, имя = тест, имя файла = recording.jfr, настройки = профиль -XXOX: Исключения: Flight= loglevel = info -jar sample.jar>

0 голосов
/ 09 ноября 2019

При использовании параметров командной строки, т. Е. -XX: StartFlightRecording: filename = dump.jfr (синтаксис JDK 11), необходимо указать каталог, в который разрешено записывать файл. По умолчанию это каталог, в котором был запущен процесс JVM.

Если вы имеете в виду использование инструментов командной строки, т.е. jcmd JFR.dump filename = dump.jfr, возникли проблемы с подключением к JVM вКонтейнер Docker. Инструмент 'jcmd' не может найти правильный каталог / tmp, в котором находится файл, который необходим для присоединения к процессу в контейнере. См. https://bugs.openjdk.java.net/browse/JDK-8228343

JMC передает данные записи из каталога / tmp через JMX, чтобы избежать этой проблемы. Вы можете написать программу на Java, которая программно создает дамп, используя. FlightRecorderMXBean .

...