Дамп потоков
На странице Дамп потоков в режиме реального времени отображается состояние каждого потока в управляемом сервисе на Spring Boot. Страница периодически опрашивает сервис, поэтому список, состояния потоков и временная шкала отражают текущее состояние JVM, а не зафиксированное в определённый момент.
Страница
«Дамп потоков» в интерфейсе Axelix
Страница доступна любому аутентифицированному пользователю — VIEWER, EDITOR, ADMIN и SUPER_ADMIN могут её
открыть и переключать Мониторинг конфликтов между потоками. Полную матрицу ролей и полномочий см. в разделе Роли и
полномочия.
В верхней части страницы расположены три элемента управления:
- Поле поиска, фильтрующее список потоков по имени, счётчик рядом показывает
<соответствует> / <всего>. - Кнопка Настройки
,
открывающая модальное окно с переключателем Мониторинг конфликтов между потоками (см. Настройки
ниже). - Скользящая лента шкалы времени, на которой выбирается момент для изучения — выбор диапазона определяет, что показано в подробностях по каждому потоку ниже.
Потоки отсортированы по приоритету JVM и отображаются как аккордеоны. В заголовке каждого аккордеона показаны имя потока, его текущее состояние и цветовой индикатор состояния (см. Цвета состояний потоков ниже).
Подробности дампа потоков
Страница подробностей дампа потоков в интерфейсе Axelix
Раскройте поток, чтобы увидеть его подробный снимок за временной диапазон, выбранный на шкале:
- Идентификатор потока: идентификатор потока, выданный JVM.
- Имя потока: имя потока.
- Состояние потока: состояние потока JVM (
RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED,…). - Приоритет: приоритет потока JVM.
- Счётчик блокировок: сколько всего раз поток был заблокирован. Заполняется, только пока включён Мониторинг конфликтов между потоками — иначе показывается Не Доступно.
- Общее время блокировки: время, которое поток провёл в заблокированном состоянии, в миллисекундах. Заполняется, только пока включён Мониторинг конфликтов между потоками — иначе показывается Не Доступно.
- Счётчик ожиданий: сколько всего раз поток ожидал уведомления. Заполняется, только пока включён Мониторинг конфликтов между потоками — иначе показывается Не Доступно.
- Общее время ожидания: время, которое поток провёл в ожидании, в миллисекундах. Заполняется, только пока включён Мониторинг конфликтов между потоками — иначе показывается Не Доступно.
- Демон: является ли поток демоном.
- Удерживается блокировкой: информация об объекте блокировки, которого ждёт поток, если применимо:
- Класс: полностью квалифицированное имя класса объекта блокировки.
- Хеш-код объекта блокировки: хэш-код идентификатора объекта блокировки.
- Стек вызовов: стек вызовов, захваченный в выбранный момент.
Цвета состояний потоков
| Индикатор | Состояние |
|---|---|
| RUNNABLE | |
| RUNNABLE (native) | |
| WAITING | |
| WAITING (suspended) | |
| TIMED_WAITING | |
| BLOCKED | |
| TERMINATED | |
| other |
Настройки
Нажатие на
открывает
модальное окно с одним переключателем:
- Мониторинг конфликтов между потоками — включает JMX-мониторинг конфликтов между потоками на
ThreadMXBeanсервиса. Когда он включён, JVM отслеживает, сколько времени каждый поток провёл в состояниях BLOCKED и WAITING, и это заполняет поляСчётчик блокировок/Общее время блокировки/Счётчик ожиданий/Общее время ожиданиявыше. Когда он выключен, эти четыре поля остаются Не Доступно.
Учтите, что мониторинг конфликтов даёт заметные накладные расходы для JVM, поэтому продакшен-сервисы обычно оставляют его выключенным и включают только во время прицельного расследования.
Включите Нужный Actuator Ендпоинт
Если вы используете Axelix 1.2.0 или новее, ничего из этого не требуется: стартер сам регистрирует свои
actuator-эндпоинты, а эндпоинты health/info Axelix больше не требуются — он отлично работает и без них. Никакая
настройка здесь не нужна.
Страница работает поверх actuator-эндпоинта axelix-thread-dump, который добавляет Axelix Spring Boot Starter. Она
доступна через стандартные свойства Spring Boot Actuator. Полный список конечных точек Axelix и сопутствующих настроек
см. в разделе Настройка Spring Boot
Starter:
management.endpoints.web.exposure.include=axelix-thread-dumpСм. также
Мониторинг транзакций
На странице Мониторинг транзакций перечислены все @Transactional методы, которые хотя бы раз выполнялись в управляемом сервисе Spring Boot, с таймингами выполнений и SQL-запросами, выполненными внутри каждого вызова. Используйте её, чтобы находить медленные транзакции и изучать запросы, которые они выполнили.
Сборщик мусора
Страница Сборщик мусора позволяет включить GC-логирование JVM на управляемом сервисе на Spring Boot, запустить сборку по требованию и скачать полученный файл лога. В продакшене GC-логирование обычно выключено. Страница нужна для того, чтобы включить его на время прицельного расследования, а затем снова выключить.