Снятие дампа памяти JVM. Standalone#
Документ определяет порядок снятия дампа памяти JVM на стенде, установленном в автономном (standalone) режиме. Действия выполняются штатными средствами JDK.
Параметр |
Значение |
|---|---|
Каталог установки |
|
Сервисы |
|
Пользователь ОС |
|
Версия JDK |
21 |
1. Предварительные условия и ограничения#
Объём файла дампа соответствует объёму занятой кучи. При установленном параметре
-Xmx18Gразмер файла может достигать 18 ГБ. При недостаточном объёме свободного дискового пространства файл дампа будет повреждён.На время снятия дампа выполнение всех потоков JVM приостанавливается и производится полная сборка мусора. Для кучи объёмом 18 ГБ длительность операции составляет несколько минут. Операцию необходимо выполнять в согласованное технологическое окно.
Команды выполняются от имени пользователя операционной системы, под которым запущен процесс (по умолчанию -
global), либо от имениroot. В противном случае подключение к JVM будет отклонено.Снятие дампа с JVM, уже находящейся в состоянии
OutOfMemoryError, может завершиться неудачей. Дамп следует снимать до исчерпания памяти, пока сервер приложений сохраняет работоспособность.
2. Порядок действий#
Шаг 1. Определить идентификатор процесса#
Сервер приложений:
sudo systemctl show -p MainPID --value global3
Планировщик заданий, если требуется снятие дампа с него:
sudo systemctl show -p MainPID --value globalscheduler
Альтернативный способ:
pgrep -u global -f ru.bitec.starter.Main
Шаг 2. Подготовить каталог и проверить свободное место#
sudo mkdir -p /opt/global/dumps
sudo chown global:global /opt/global/dumps
df -h /opt/global/dumps
Объём свободного пространства должен быть не менее значения параметра -Xmx. Текущее значение определяется командой:
grep globalMemory /opt/global/globalserver/parameters.sh
Шаг 3. Снять дамп#
Вместо <PID> указывается идентификатор процесса, полученный на шаге 1.
sudo -u global jmap -dump:format=b,file=/opt/global/dumps/global3_$(date +%Y-%m-%d_%H-%M-%S).hprof <PID>
Если исполняемый файл jmap отсутствует в PATH, команда вызывается по полному пути из установленной JDK 21 - например
/usr/lib/jvm/java-21-java/bin/jmap. Точный путь указан в журнале запуска сервера приложений в строке
ru.bitec.starter.Main - java.home = ….
По завершении операции необходимо убедиться, что файл создан и его размер отличен от нуля.
3. Оперативная диагностика без снятия дампа#
Для предварительной оценки состояния кучи без длительной приостановки сервера применяются следующие команды.
Команда |
Назначение |
|---|---|
|
Перечень классов, упорядоченный по объёму занимаемой памяти |
|
Текущее заполнение областей кучи |
|
Действующие параметры JVM |
|
Дамп потоков - состав выполняемых операций на текущий момент |
Сведения о занятости пулов памяти доступны также в интерфейсе системы: Сервис → Мониторинг → вкладка «Узлы кластера», блок «Используемое пространство памяти».
4. Состав материалов для передачи в службу поддержки#
Файл дампа
*.hprof. При значительном объёме файл передаётся ссылкой на файловое хранилище, согласованное с ИБ.Результаты выполнения команд
jcmd <PID> VM.flagsиjcmd <PID> GC.heap_info.Журналы сервера приложений
/opt/global/globalserver/logs/global3.*.logза период инцидента.Журналы планировщика
/opt/global/globalserver/logs/scheduler/jobscheduler.*.logза тот же период.Системный журнал:
journalctl -u global3 -u globalscheduler --since "<дата>" > journal.log.Файл параметров запуска
/opt/global/globalserver/parameters.sh.