Удаленное профилирование Yourkit с докером

Yourkit — это очень часто используемый профилировщик в командах по производительности для всего профилирования, связанного с Java. Если основное использование этого профилировщика — профилирование варианта использования на вашем локальном компьютере, бывают ситуации, когда вам нужно профилировать удаленно работающие серверы Java. Это становится еще труднее, когда сервер запускается внутри контейнера докеров, потому что в большинстве случаев эти контейнеры настроены так, чтобы не открывать никаких портов, кроме назначенных портов, таких как 8080.

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

Я часто использовал это в контейнерах XO, поэтому я буду использовать имена контейнеров из XO.

прежде всего нам нужно найти контейнер, в котором размещено приложение. Используйте команду docker ps, чтобы получить его.
docker -H <хост> ps -fname=machine
Это даст вывод что-то вроде

ИДЕНТИФИКАТОР КОНТЕЙНЕРА ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНА СОСТОЯНИЕ ПОРТЫ
c892579bed1f register2.swarm.devfactory.com/crossover/xo-tomcat:95 «/scripts/docker-ent…» Около часа назад Наверх Около часа 10.69.11.214:20314->8080/tcp
Из вывода вы можете легко обнаружить, что идентификатор контейнера c892579bed1f — это тот, который нам нужно использовать для дальнейших шагов.

Когда у нас есть контейнерный идентификатор докера, следующим шагом будет вход в контейнер bash. мы будем использовать команду docker exec, чтобы сделать то же самое.
docker -H dl6..com exec -it c892579bed1f
это откроет консоль bash для контейнера.

Следующим шагом является загрузка и размещение бинарных файлов yourkit в контейнере. Запустите команду ниже с соответствующим двоичным URL-адресом внутри docker bash, чтобы сделать то же самое.
root@machine:/usr/local/tomcat# wget -P /tmp/ &&
распаковать /tmp/YourKit-JavaProfiler-2018.04-b82.zip -d /usr/local &&
РМ /tmp/ВашКит-JavaProfiler-2018.04-b82.zip

Эта команда загрузит двоичные файлы yourkit на компьютер, разместит их в каталоге /usr/local и удалит загруженный двоичный файл, чтобы освободить место.

генерирует вывод, как показано ниже

—2018-09-10 12:44:58—
Разрешение www.yourkit.com (www.yourkit.com)… 144.76.223.241
Подключение к www.yourkit.com (www.yourkit.com)|144.76.223.241|:443… подключено.
HTTP-запрос отправлен, ожидается ответ… 200 OK
Длина: 70990617 (68 м) [application/zip]
Сохранение в: ‘/tmp/YourKit-JavaProfiler-2018.04-b82.zip’

YourKit-JavaProfiler-2018.04- 100%[=================================================>] 67,70 млн 717 КБ/с за 1 мин 52 с

2018-09-10 12:46:51 (618 КБ/с) — «/tmp/YourKit-JavaProfiler-2018.04-b82.zip» сохранен [70990617/70990617]

Архив: /tmp/YourKit-JavaProfiler-2018.04-b82.zip
.
.
.
раздувание: /usr/local/YourKit-JavaProfiler-2018.04/jre64/release

Следующим шагом является присоединение агента профилировщика yourkit к работающей JVM, вам нужно знать идентификатор процесса работающей JVM, обычно это 1, если это контейнер только для tomcat.
Используйте attach.sh в <директории установки Yourkit>/bin

root@machine:/usr/local/tomcat# /usr/local/YourKit-JavaProfiler-2018.04/bin/attach.sh

Посмотрите вывод ниже, он показывает все процессы и спрашивает, какой pid вы хотите использовать, я ввел 1 для pid и использовал порт по умолчанию, просто нажав Enter. Вы также можете передать PID в качестве первого параметра

[YourKit Java Profiler 2018.04-b82] Файл журнала: /root/.yjp/log/profiler-ui-362.log
Запуск JVM:

ИмяПИДСтатус
Кот1Агент профилировщика не загружен. Готов к прикреплению.

Введите PID приложения, которое вы хотите подключить (0 для выхода), и нажмите Enter:

Не число. Пожалуйста, введите еще раз.
1
Укажите список параметров запуска, разделенных запятыми, или нажмите Enter для параметров по умолчанию (рекомендуется):
<<Ввод>>
root@machine:/usr/local/tomcat#
Начать профилирование
Теперь наш агент подключен к процессу, и нам нужно начать профилирование. Утилита yjp-controller-api-redist.ja доступна в <каталоге установки Yourkit>/lib, поскольку мы будем часто использовать эту утилиту, давайте изменим рабочий каталог. перед вызовом этой утилиты.

root@machine:/usr/local/tomcat# cd /usr/local/YourKit-JavaProfiler-2018.04/lib
root@machine:/usr/local/YourKit-JavaProfiler-2018.04/lib# java -jar yjp-controller-api-redist.jar localhost 10001 start-cpu-sampling
Команда yjp-controller-api-redist.jar имеет несколько параметров, перечисленных ниже.

Профилирование можно выполнять в режиме выборки или в режиме трассировки. выдать yjp-controller-api-redist.jar без каких-либо параметров

java -jar yjp-controller-api-redist.jar
Инструменты командной строки YourKit Java Profiler 2018.04-b82

Использование: java -jar yjp-controller-api-redist.jar <хост> <порт> <команда>

где <команда> является одним из:

статус
захват-память-моментальный снимок
захват-hprof-моментальный снимок
снимок производительности захвата
старт-процессор-выборка
запуск-процессор-трассировка
старт-процессор-подсчет звонков
стоп-процессор-профилирование
очистить данные процессора
начать-распределить-запись-все
// записываем все объекты
старт-аллок-запись-адаптивный [alloc-sampled]
// записываем все объекты размером >= 4 КБ и только каждый 10-й меньший объект
остановить-распределить-запись
очистить-распределить-данные
запуск-монитор-профилирование
стоп-монитор-профилирование
очистить данные монитора
включить телеметрию стека
отключить телеметрию стека
сила-gc
четкие карты

Примеры:
java -jar yjp-controller-api-redist.jar localhost 10001 захват-память-моментальный снимок
java -jar yjp-controller-api-redist.jar localhost 10001 start-cpu-sampling

После запуска профилирования очистите данные процессора перед выполнением вашего варианта использования.
root@machine:/usr/local/YourKit-JavaProfiler-2018.04/lib# java -jar yjp-controller-api-redist.jar localhost 10001 clear-cpu-data
Теперь выполните свой вариант использования и создайте снимок
root@machine:/usr/local/YourKit-JavaProfiler-2018.04/lib# java -jar yjp-controller-api-redist.jar localhost 10001 Capture-Performance-Snapshot
Получен снимок: /root/Snapshots/Tomcat-2018-09-10.snapshot
root@machine:/usr/local/YourKit-JavaProfiler-2018.04/lib# java -jar yjp-controller-api-redist.jar localhost 10001 stop-cpu-profiling
Профилирование ЦП остановлено

В выводе вы увидите, что снимок создается в этом месте — /root/Snapshots/Tomcat-2018-09-10.snapshot

Копировать снимок
Используйте docker cp для копирования моментального снимка на локальный компьютер — помните, что мы отметили идентификатор контейнера, нам придется использовать его для копирования. Вы можете выполнить эту команду из отдельной оболочки, чтобы избежать выхода из текущего сеанса ptofiling.

docker cp -H dl6..com c892579bed1f:/root/Snapshots/Tomcat-2018-09-10.snapshot F:\yktsnaphosts
При этом моментальный снимок будет скопирован в папку F:\yktsnaphosts\Tomcat-2018-09-10.snapshot, которую вы сможете открыть с помощью вашей лицензионной версии yourkit для анализа.

Все команды вместе

docker -H ps -fname=

docker -H exec -it bash

wget -P /tmp/ &&
распаковать /tmp/YourKit-JavaProfiler-2018.04-b82.zip -d /usr/local &&
РМ /tmp/ВашКит-JavaProfiler-2018.04-b82.zip

/usr/local/YourKit-JavaProfiler-2018.04/bin/attach.sh
cd /usr/local/YourKit-JavaProfiler-2018.04/lib
java -jar yjp-controller-api-redist.jar localhost 10001 start-cpu-sampling

java -jar yjp-controller-api-redist.jar localhost 10001 очистить данные процессора

Займитесь своей деятельностью

java -jar yjp-controller-api-redist.jar localhost 10001 захват-производительность-моментальный снимок

java -jar yjp-controller-api-redist.jar localhost 10001 остановить профилирование процессора

docker cp -H :/root/Snapshots/Tomcat-2018-09-10.snapshot

выход

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *