Статус сервера

Экран «Администрирование ⇒ Статус сервера» показывает состояние того инстанса, который ответил на запрос. За балансировщиком это существенно: почти все цифры относятся к одному узлу, а не ко всей установке.

Вкладка «Состояние»

Снимок собирается заново при каждом обновлении, по кнопке или по таймеру. Период обновления выбирается там же, автообновление можно выключить.

Инстанс и Сборка

Идентификатор узла из настройки server.instance.id, порты, версия, номер сборки, коммит, ветка и время сборки. Данные о сборке берутся из файла ru/bgcrm/version/update.properties, который формируется на сборке; пустые значения означают, что модуль собран в обход неё.

JVM и Приложение

Версия машины, аргументы запуска, время старта процесса и время готовности приложения. Системные свойства показываются списком «имя — значение», остальные аргументы ниже.

Запросы

Поток обращений к инстансу за последнюю минуту: частота, среднее и максимальное время ответа, число ошибок. Периодический опрос pool.do вынесен отдельной строкой и в остальные цифры не входит. Его шлёт по таймеру каждая открытая вкладка, поэтому вместе с ним средние показывают не работу, а число вкладок.

Планировщик

Включён ли запуск задач, сколько задач загружено из конфигурации и сколько выполняется в данный момент. Задача считается загруженной, если её блок не закомментирован и класс найден; блоки, которые не загрузились, показываются отдельной припиской.

Веб-сокеты

Открытые соединения, свёрнутые по адресам. Зависшим считается сокет, не ответивший на ping дольше минуты: клиент ушёл, а соединение ещё держится.

Память и Сборка мусора

Куча, пулы памяти и счётчики сборщиков. Счётчики растут с момента старта, поэтому смысл имеет прирост между обновлениями, а не само число.

Пулы соединений с БД

Занятые и свободные соединения по каждой базе с пределами из конфигурации. Для slave-баз показывается состояние репликации, оно обновляется задачей планировщика (см. Планировщик). Если задача не запущена на этом инстансе, состояние остаётся тем, каким было при старте.

Клиенты внешних API

Состояние предохранителей, ограничителей частоты и пулов у клиентов, которые уже обращались к внешним системам. Компонент появляется после первого обращения.

Плагины и Динамический код

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

Диагностика

Списки, которые запрашиваются отдельно и в автообновление не входят: авторизовавшиеся пользователи с их сессиями и стек занятых соединений пула.

Вкладка «История релизов»

Строится из отметок о запуске: сервер пишет строку в таблицу app_instance_start при каждом старте. Это то, что действительно поднималось на стенде, а не то, что собрано в репозитории.

Сборки сворачиваются по версии, номеру, коммиту и ветке; видно, когда сборка поднималась впервые и в последний раз, сколько раз и на каких инстансах. Состав сборки показывается ключами задач: они собираются на сборке из сообщений коммитов после ближайшего тега release-N.

Без таблицы вкладка работает, но остаётся пустой. Таблица создаётся скриптом ru/bgcrm/state/repository/table.sql.

Настройки

Настройка Что включает

state.license.show=1

Блок «Информация о лицензии». Данные берутся из системных свойств lic. и заполняются только при запуске с ключами -Dlic., поэтому по умолчанию блок скрыт.

jira.browse.url

Адрес просмотра задачи, к которому дописывается ключ. Без него состав сборки выводится текстом, а не ссылками.

db.trace=1

Запоминание стека для каждого занятого соединения пула. Без настройки кнопка «Стек занятых соединений» отвечает, что трассировка выключена. Значение читается один раз при инициализации пула, то есть требует перезапуска.

Права

Просмотр состояния, списка пользователей, стека соединений, сообщений компиляции и истории релизов разрешён всем, у кого есть доступ к экрану.

Сброс сессий — отдельное право StateAction:dropSessions, по умолчанию оно не выдано никому. Без него кнопки сброса не показываются.

Что относится только к одному инстансу

Часть данных живёт в памяти процесса и не общая на установку:

  • список авторизовавшихся пользователей и сброс их сессий;

  • открытые веб-сокеты;

  • счётчики запросов и состояние пулов;

  • состояние репликации slave-баз.

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