Перейти к основному содержимому
Версия: 7.0

Монитор процессов

Монитор процессов — встроенный механизм платформы, показывающий состояние сервера приложений и сервера БД в текущий момент времени: активные потоки сервера приложений, активные SQL-запросы, цепочки блокировок, а также набор действий для прерывания и принудительного завершения этих процессов.

Содержимое монитора

Монитор открывается формой Администрирование > Система > Монитор процессов и состоит из трёх вкладок:

ВкладкаЧто показывает
Все процессыПолный список активных серверных потоков и активных SQL-запросов, объединённых по логическим процессам
Блокирующие процессыПроцессы, удерживающие блокировки, которых ждут другие процессы
Блокируемые процессыПроцессы, ожидающие освобождения блокировок

Колонки

Каждая запись монитора объединяет два аспекта одного логического процесса: серверный поток (Java) и связанный с ним SQL-запрос (если процесс в этот момент работает с БД). Часть колонок относится к java-потоку, часть — к запросу БД.

Идентификация процесса

КолонкаЧто показывает
ID потока процессаИдентификатор потока сервера приложений (для процессов БД без java-потока — s + pid backend'а)
ID процесса (SQL)Идентификатор backend-процесса на сервере БД
КомпьютерКомпьютер, с которого создано подключение
ПользовательПользователь, которому принадлежит процесс
Адрес пользователя (SQL)Сетевой адрес клиента подключения к БД (это адрес сервера приложений, а не браузера конечного пользователя)

Java-поток

КолонкаЧто показывает
Имя java-потокаИмя потока сервера приложений
Статус (Java)Состояние java-потока: RUNNABLE, BLOCKED, WAITING, TIMED_WAITING
LSF след потокаСтек выполнения на уровне lsFusion — цепочка действий/свойств/форм, исполняемых в потоке. Показывает логику приложения, а не кадры JVM; обычно самая полезная колонка, чтобы понять, что именно делает процесс
След java-потока (Java)Сырой стек вызовов JVM для потока на момент опроса
След java-потока (SQL)Java-стек потока, инициировавшего текущий SQL-запрос (снимок, привязанный к процессу БД)
Выделенная памятьСуммарный объём памяти, аллоцированной потоком за всё время жизни (счётчик только растёт и не уменьшается при сборке мусора). Это не текущее потребление, а совокупная нагрузка потока на кучу
Память за последний интервалОбъём памяти, аллоцированной потоком за последний интервал измерения, — скорость аллокации
Время начала вызоваМомент начала текущего вызова (задачи) на java-потоке
Блокировка (Java)Блокировка (монитор), которую поток сейчас удерживает или ожидает

Колонки Выделенная память и Память за последний интервал заполняются только при включённой настройке readAllocatedBytes.

SQL-запрос

КолонкаЧто показывает
Запрос (SQL)Сокращённое представление текущего SQL-запроса
Полный запрос (SQL)Полный текст запроса; действие Копировать полный запрос в буфер кладёт его в буфер обмена
Debug Info (SQL)Расшифровка параметров и контекста выполняющегося запроса — значения, подставленные в SQL; помогает понять, над какими данными он работает. Формируется только для запросов дольше порога
Время запуска (SQL)Момент старта текущего запроса на сервере БД (используется для подсветки по возрасту)
Статус (SQL)Состояние сессии БД (active, idle, idle in transaction, …), берётся из pg_stat_activity
Wait Event Type (SQL), Wait Event (SQL)Категория (Lock, LWLock, IO, Client, …) и конкретное событие, которого ждёт backend БД. Показывают, на чём именно застрял запрос
Status Message (SQL)Внутреннее сообщение о ходе применения/обработки события — шаг вида event: 3/57 <свойство>
Query TimeoutТаймаут (в секундах) для текущего выполняемого запроса
Disabled nested loopДля сессии выключен план nested loop (SET enable_nestloop=off) — оптимизация планировщика для тяжёлых запросов

Запрос подсвечивается фоном по возрасту транзакции, в которой он выполняется: чем дольше транзакция удерживает изменения, тем агрессивнее фон, что позволяет визуально отделить кратковременные операции от долгих или зависших.

Транзакция

КолонкаЧто показывает
Активный (SQL)Выполняется ли сейчас запрос
В транзакции (SQL)Процесс находится внутри транзакции
Время начала транзакции (SQL)Момент старта транзакции; чем дольше она открыта, тем агрессивнее фон подсветки записи
Номер попытки (SQL)Сколько раз транзакция перезапускалась (deadlock, конфликт сериализации, «handled»-конфликты платформы). 0 — повторов не было; значение вида 2(...) — идёт 2-я и последующая попытка

Блокировки

Для каждого процесса дополнительно показывается список блокируемых им процессов и список процессов, которые блокируют его самого. На вкладках Блокирующие и Блокируемые эта связь раскрывается в иерархию: можно перейти от удерживающего блокировку процесса к ожидающим его, и наоборот. Граф блокировок строится рекурсивно — циклические взаимные блокировки (deadlock) обнаруживаются и помечаются отдельно.

КолонкаЧто показывает
Блокирующий поток, ID блокирующего потокаПоток, удерживающий блокировку, которую ожидает текущий процесс
Кол-во заблокированных процессовСколько процессов (прямо и транзитивно) ожидают этот процесс
Глубина блокировкиГлубина процесса в дереве ожидания блокировок
DeadlockПризнак участия в цикле взаимных блокировок

Прерывание и принудительное завершение

Для каждого процесса в мониторе доступны четыре действия:

ДействиеЧто делаетКогда применять
Снять процессОтменяет SQL-запрос процесса, если он есть; иначе посылает java-потоку запрос на отмену через стандартный механизм прерывания — поток завершает текущую операцию и выходит при ближайшей проверке флага прерыванияШтатная отмена долгого или зависшего процесса
Убить процессПринудительно завершает процесс БД, если запрос активен; иначе принудительно завершает java-потокКрайний случай: процесс не реагирует на отмену
Снять java-процессПосылает java-потоку запрос на отмену — даже когда строка относится к SQL-процессуОтменить java-сторону SQL-процесса, не трогая сам запрос
Убить java-процессПринудительно завершает java-поток SQL-процессаКрайний случай на java-стороне SQL-процесса

Кнопки «Снять java-процесс» и «Убить java-процесс» показываются только для SQL-процессов, за которыми стоит java-поток.

«Убить» — операция последней инстанции: после неё состояние сервера приложений и сервера БД может потребовать перезапуска.

Фильтр по типу процессов

Монитор показывает процессы через один из четырёх фильтров: все процессы, все активные процессы, только активные SQL-запросы или только активные потоки сервера приложений. «Активные» фильтры отсеивают процессы, простаивающие вне транзакции или запроса, и оставляют только те, что действительно нагружают сервер на момент опроса. По умолчанию монитор открывается на активных SQL-запросах. Простаивающие системные потоки — поток событий, сетевой ввод-вывод, служебные потоки JVM — из списка отфильтровываются как неинформативные.