Сбор служебной информации для анализа ошибок
Стеки потоков
- Снятие стеков потоков утилитой jstack. Linux
- Удаленное снятие стеков потоков утилитой Java VisualVM
- Снятие стеков потоков с помощью Java Melody
- Периодическое снятие стеков потоков. Linux
Стек потока представляет собой LIFO структуру, упорядоченный список методов в порядке их вызова потоком.
Дамп стеков потоков (Thread dump, стеки потоков) — это список потоков и их стеков.
Рекомендуется снимать стеки потоков, охватывающие весь период, в который возникает проблема. Для точной диагностики может потребоваться 5-7 стеков потоков с периодичностью 3-5 секунд.
Снятие стеков потоков утилитой jstack. Linux
Утилита jstack входит в JDK.
Опция "-F" утилиты jstack не используется, т.к. полученный снимок в большинстве случаев не показателен для поиска причин проблемы.
В примере:
- приложение установлено в каталог /opt/naumen/nausd4;
- Java установлена в каталог /opt/naumen/java.
Выполните следующие действия:
-
Чтобы узнать PID процесса приложения, в терминале (с правами root или пользователя, от имени которого запущено приложение) выполните команду:
pgrep -f /opt/naumen/nausd4
-
Чтобы получить стеки потоков, в терминале (с правами пользователя, от имени которого запущено приложение) выполните команду:
/opt/naumen/java/bin/jstack $PID > "/tmp/stack.$(date +%Y%m%d-%H%M%S).$PID.txt"
В результате будет сформирован текстовый файл, содержащий стеки потоков приложения.
Удаленное снятие стеков потоков утилитой Java VisualVM
Утилита Java VisualVM (jvisualvm) входит в Oracle JDK.
Выполните следующие действия:
-
Добавьте удаленное подключение.
-
Перейдите на вкладку стеков Thread и нажмите Thread dump.
-
Сохраните стеки потоков на диск.
Снятие стеков потоков с помощью Java Melody
В приложении необходимо включить мониторинг Java Melody
Выполните следующие действия:
- Войдите в приложение под суперпользователем.
- В адресной строке вместо .../sd/operator наберите .../sd/monitoring. Откроется окно мониторинга JavaMelody.
- В блоке Threads перейдите по ссылке Details. Откроется перечень потоков приложения.
-
Внизу страницы перейдите по ссылке Dump threads as text.
В результате откроется стек потоков приложения, который необходимо сохранить в виде текстового файла.
Периодическое снятие стеков потоков. Linux
Чтобы настроить автоматическое периодическое снятие стеков потоков, выполните следующие действия:
-
Создайте файл stack.sh.
Значения переменных приведены для примера, измените значение переменных в соответствии с имеющейся инсталляцией приложения.
Copy#!/bin/bash
# Срок хранения стеков потоков в днях
DAYS_TO_STORE=3
# Расположение JAVA
JAVA_HOME=/opt/naumen/java
# Расположение стеков потоков
STACK_PATH=/opt/naumen/mon/stack
#Директория установки приложения
APP_DIR=/opt/naumen/nausd4
if [[ ! -d "$STACK_PATH" ]]; then
mkdir -p "$STACK_PATH"
fi
# Поиск PID приложения
PID=$(cat "$APP_DIR/tomcat/temp/catalina.pid")
# Снятие стека потоков
if [[ "$PID" =~ ^[0-9]+$ ]]; then
stack_file="${STACK_PATH}/stack-$(date +%F-%H%M%S)-${PID}.txt"
echo "PID: $PID" > "$stack_file"
$JAVA_HOME/bin/jstack -l "$PID" >> "$stack_file"
# Удаление старых стеков
find "$STACK_PATH" -name "stack-*" -mtime +"$DAYS_TO_STORE" -delete
else
echo "Wrong PID: $PID"
fi -
Сделайте данный скрипт исполняемым:
chmod +x stack.sh
-
Добавьте скрипт в crontab пользователя, от имени которого запущено приложение (crontab -e):
*/5 * * * * $SCRIPT_PATH/stack.sh
где $SCRIPT_PATH путь до скрипта stack.sh
Особенности. При автоматическом периодическом снятии стеков потоков можно пропустить искомый период. Например, если проблема возникает периодически при выполнении пользователем определенных действий. В этом случае рекомендуется производить частое снятие стеков потоков вручную и по мере снятия производить действия, приводящие к проблеме.
Дамп памяти
Дамп памяти (Heap dump) — это слепок текущего состояния памяти приложения, со всеми данными, обращающимися в нем в данный момент времени.
Дамп памяти содержит полную информацию о том, что происходит внутри приложения. Дамп памяти используется для точной диагностики, например, при проблемах, связанных с производительностью.
Формат файла: <имя_файла>.hprof
Размер дампа памяти равен объему памяти, выделенной приложению. При получении дампа памяти необходимо учитывать свободное место на диске.
Дамп памяти можно получить при помощи утилиты jmap, входящей в Oracle JDK.
Снятие дампа памяти может занимать продолжительное время, в течение которого приложение будет недоступно.
В примере:
- приложение установлено в каталог /opt/naumen/nausd4,
- Java установлена в каталог /opt/java.
Выполните скрипт:
#!/bin/bash
# Расположение JAVA
JAVA_HOME="/opt/naumen/java"
# Расположение файла дампа памяти
HEAP_DUMP=/tmp/heapdump.hprof
# Директория установки приложения
APP_DIR=/opt/naumen/nausd4/
# Поиск PID приложения
PID="$(pgrep -f "$APP_DIR")"
# Получение дампа
$JAVA_HOME/bin/jmap -dump:file=$HEAP_DUMP $PID
# Архивирование дампа
tar -czf $HEAP_DUMP.tgz $HEAP_DUMP
В результате будет сформирован файл /tmp/heapdump.hprof.tgz, содержащий дамп памяти приложения.
Сетевая статистика браузера (HAR)
HAR-файл — это лог сетевых HTTP запросов браузера (взаимодействия браузера с веб-приложением (веб-сайтом)).
С помощью HAR-файлов специалисты техподдержки проверяют сетевые запросы вашего браузера в момент возникновения проблемы, с целью ее идентификации.
Сбор сетевой статистики браузера помогает диагностировать проблемы производительности, проблемы связанные с отдельно взятыми рабочими станциями и т.п.
- Сбор сетевой статистики в Edge
- Сбор сетевой статистики в Google Chrome
- Сбор сетевой статистики в Firefox
Сбор сетевой статистики в Edge
Для сбора сетевой статистики браузера выполните следующие действия:
- Откройте браузер и нажмите клавишу F12.
- Перейдите на вкладку "Сеть" (Network).
- Нажмите кнопку в форме зеленого треугольника "Начать сбор сетевого трафика (F5)" (Enable network traffic capturing (F5)).
- Совершите переход или выполните действия, во время которых возникает ошибка.
- Сохраните собранную статистику, нажав кнопку в форме дискеты рядом с "Начать сбор сетевого трафика".
Сбор сетевой статистики в Google Chrome
Для сбора сетевой статистики браузера выполните следующие действия:
- Откройте "Инструменты разработчика" (Developer tools) одним из способов:
- Меню браузера (в верхнем правом углу) → "Дополнительные инструменты" (More tools) → "Инструменты разработчика" (Developer tools).
- Нажмите на клавиатуре Ctrl+Shift+I.
- Перейдите на вкладку "Сеть" (Network).
- Проверьте — круглая кнопка в левом верхнем углу панели инструментов должна быть красной. Если кнопка серая, нажмите ее, чтобы начать запись.
- Установите флажок "Сохранять журнал" (Preserve log).
- Нажмите на перечеркнутый круг, чтобы удалить лишние данные перед воспроизведением ошибки и записи информации сеанса.
- Совершить переход или выполните действия, во время которых возникает ошибка
- Нажмите на таблицу правой кнопкой мыши и выберите "Сохранить как HAR-файл с данными" (Save as HAR with content).
Сбор сетевой статистики в Firefox
Для сбора сетевой статистики браузера выполните следующие действия:
- Откройте браузер и нажмите клавишу F12.
- Перейдите на вкладку "Сеть" (Network).
- Нажмите кнопку с иконкой корзина "Очистить" (Clear).
- Установите флажок "Непрерывные логи" (Persist Logs).
- Совершить переход или выполните действия, во время которых возникает ошибка
- Нажмите на таблицу правой кнопкой мыши и выберите "Сохранить все как HAR" (Save All as HAR).