Серверная отладка и техжурнал 1С 8.3: от ключа службы до чтения логов

· 9 мин

Содержание

Чтобы включить отладку на сервере 1С, добавьте ключ -debug в командную строку службы агента ragent.exe и перезапустите службу. После этого конфигуратор видит серверные предметы отладки, а точки останова в модулях с &НаСервере начинают срабатывать.

Если нужна не пошаговая отладка, а диагностика ошибок и тормозов на рабочем сервере, включайте технологический журнал через файл logcfg.xml. Ниже оба способа: как настроить, как проверить, что работает, и как всё вернуть обратно без следов на диске.

Подготовка: отладчик или технологический журнал

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

ИнструментКогда нуженЧем рискуете
🐞 Отладчик (-debug)Пройти код по шагам, посмотреть значения переменных, поймать место ошибкиЗамедление серверных вызовов, «зависший» на точке останова сеанс держит блокировки
📄 Технологический журнал (logcfg.xml)Найти исключения, долгие запросы, взаимоблокировки у реальных пользователейБыстрый рост логов, нагрузка на диск при широком фильтре
🔎 Утилита racПосмотреть кластер, рабочие процессы, сеансы, завершить зависший сеансЗавершение не того сеанса обрывает работу пользователя

Что подготовить заранее:

  • 🖥️ Доступ администратора к серверу 1С (локально или по RDP/SSH).
  • 🔑 Пароль администратора кластера, если он задан.
  • 📁 Отдельный диск или каталог для логов с запасом места: от 5–10 ГБ на сутки подробного журнала.
  • 🕐 Окно для перезапуска службы. Без перезапуска ключ -debug не применится.
  • 🧪 По возможности тестовый сервер или копия базы. Пошаговую отладку на рабочем кластере лучше не вести.

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

Как включить отладку на сервере 1С через параметры службы

Отдельного конфигурационного файла вроде ragent.cfg, где «включается отладка», у сервера 1С нет. Режим отладки задаётся ключом в командной строке агента сервера. Рабочие процессы rphost и менеджер кластера rmngr получают его от агента.

Windows: правка службы агента

Служба называется примерно так: 1C:Enterprise 8.3 Server Agent (x86-64). Её командная строка хранится в реестре.

  1. Откройте regedit от имени администратора.
  2. Перейдите в ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ и найдите раздел службы агента 1С.
  3. Откройте параметр ImagePath.
  4. Добавьте ключ -debug после пути к ragent.exe.
  5. Перезапустите службу в оснастке services.msc.

Строка до и после правки выглядит так:

"C:\Program Files\1cv8\8.3.24.1467\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"

"C:\Program Files\1cv8\8.3.24.1467\bin\ragent.exe" -debug -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"

Номер версии, порты и путь к srvinfo у вас будут свои. Меняйте только ключ отладки, остальное не трогайте.

Перезапуск службы агента обрывает все сеансы пользователей на этом сервере. Делайте его вечером или в выходной, заранее предупредив сотрудников и попросив закрыть программу.

Протокол отладки: TCP или HTTP

У ключа -debug есть два варианта:

  • 🔌 -debug или -debug -tcp — классическая отладка по TCP. Конфигуратор подключается к рабочим процессам напрямую.
  • 🌐 -debug -http — отладка через сервер отладки dbgs. Его удобнее пропускать через межсетевой экран: нужен один порт, по умолчанию 1550.

Протокол в конфигураторе должен совпадать с протоколом на сервере. Если на сервере -http, а в конфигураторе выбран TCP, предметы отладки не появятся.

Linux: systemd-юнит

На Linux с платформой 8.3.21 и новее служба сервера 1С работает как systemd-юнит. Ключ добавляют в строку запуска через переопределение юнита, чтобы обновление платформы не стёрло правку:

sudo systemctl edit srv1cv8-8.3.24.1467@default
# в открывшемся файле переопределите ExecStart, добавив -debug к строке запуска ragent
sudo systemctl daemon-reload
sudo systemctl restart srv1cv8-8.3.24.1467@default

Точное имя юнита посмотрите командой systemctl list-units | grep srv1cv8. На старых установках со скриптом /etc/init.d/srv1cv83 отладку включала переменная SRV1CV8_DEBUG=1 в файле /etc/sysconfig/srv1cv83 (RHEL-подобные системы) или /etc/default/srv1cv83 (Debian, Ubuntu).

Как проверить, что ключ применился

После перезапуска посмотрите командную строку процессов. В Windows через PowerShell:

Get-CimInstance Win32_Process -Filter "name='ragent.exe' or name='rphost.exe'" | Select-Object Name, CommandLine

В Linux: ps aux | grep -E 'ragent|rphost'. В строке ragent должен быть -debug.

Подключение конфигуратора к серверной отладке

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

  1. Откройте базу в конфигураторе.
  2. Проверьте протокол: Сервис → Параметры, раздел про отладку. Выберите тот же протокол, что на сервере.
  3. Откройте окно Отладка → Подключение. Появится список «Предметы отладки».
  4. Нажмите кнопку автоматического подключения и отметьте серверные предметы, а также тонкий клиент.
  5. Запустите клиент кнопкой Отладка → Начать отладку или просто откройте базу у пользователя: при автоподключении сеанс попадёт в список сам.
  6. Поставьте точку останова (F9) в серверной процедуре и выполните действие в клиенте.

Если точка останова в процедуре с &НаСервере стала активной и выполнение остановилось — отладка на сервере работает.

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

Проверка кластера и сеансов через утилиту rac

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

Для работы rac нужен запущенный сервер администрирования ras. По умолчанию он слушает порт 1545:

ras cluster --daemon

Основные команды, которые понадобятся во время отладки:

rac cluster list
rac process list --cluster=<uuid-кластера>
rac session list --cluster=<uuid-кластера>
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Идентификатор кластера берётся из вывода первой команды. Если на кластере задан администратор, добавьте --cluster-user и --cluster-pwd. Полный список параметров выводит rac help и rac session help.

rac session terminate обрывает работу пользователя без сохранения. Перед завершением сверьте имя пользователя и компьютер в выводе rac session list.

Технологический журнал: настройка logcfg.xml и чтение событий

Технологический журнал включается файлом logcfg.xml в каталоге conf установки 1С. В Windows общий каталог для всех версий — C:\Program Files\1cv8\conf\. Платформа перечитывает файл примерно раз в минуту, перезапускать службу не нужно.

Минимальный журнал для поиска ошибок

Такой конфиг пишет только исключения и их контекст. Его можно держать на рабочем сервере долго:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\1C_logs\excp" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <event>
      <eq property="name" value="EXCPCNTX"/>
    </event>
    <property name="all"/>
  </log>
</config>

history="24" — сколько часов хранить файлы. Старые платформа удаляет сама.

Журнал по одной базе

Чтобы не собирать события всего кластера, добавьте условие по имени базы. Пример для базы buh_main с запросами к СУБД и управляемыми блокировками:

<event>
  <eq property="name" value="DBMSSQL"/>
  <eq property="p:processName" value="buh_main"/>
</event>
<event>
  <eq property="name" value="TLOCK"/>
  <eq property="p:processName" value="buh_main"/>
</event>

Какие события что показывают

СобытиеЧто ищем
EXCPИсключения: текст ошибки, модуль, строка
EXCPCNTXКонтекст исключения, которое привело к аварийному завершению
CALL, SCALLСерверные вызовы и их длительность
DBMSSQL, DBPOSTGRSТекст запросов к MS SQL или PostgreSQL
TLOCK, TTIMEOUT, TDEADLOCKУправляемые блокировки, таймауты, взаимоблокировки
CONN, PROCПодключения и события рабочих процессов: старт, падение, перезапуск

Как читать файлы журнала

В каталоге журнала появятся папки вида rphost_4120, rmngr_2280, ragent_1964. Число — идентификатор процесса. Внутри файлы по часам: 26100714.log означает 2026 год, 10 месяц, 7 число, 14 час.

Каждая запись начинается со строки вида 27:45.123456-15,EXCP,3,.... Это минуты и секунды внутри часа, длительность, имя события и уровень вложенности. Дальше идут свойства: Usr, Context, Descr.

Для быстрого поиска хватает обычного grep или Select-String:

Select-String -Path "D:\1C_logs\excp\rphost_*\*.log" -Pattern "Descr=" | Select-Object -Last 20

Как не уронить производительность при включённой отладке

Режим -debug на рабочем кластере — частая причина жалоб «всё стало медленно». Серверные вызовы проходят через дополнительный слой, а остановленный на точке сеанс держит транзакцию и блокировки.

Правила, которые снимают большинство проблем:

  • 🧪 Пошаговую отладку ведите на тестовом сервере или копии базы.
  • ⏱️ На рабочем кластере держите -debug только на время разбора, а не «на всякий случай».
  • 🛑 Не ставьте точки останова внутри транзакций проведения в рабочей базе: остальные пользователи упрутся в блокировки.
  • 📄 В техжурнале не включайте DBMSSQL без фильтра по базе: за час на нагруженном сервере набегают гигабайты.
  • 💾 Пишите журнал на отдельный диск, а не на системный и не на диск с файлами СУБД.
  • 📉 Свойство all полезно для разбора, но для долгого сбора ограничьте список нужными свойствами.

Для разбора тормозов удобна связка: сначала короткий журнал CALL и DBMSSQL на 15–30 минут по одной базе, потом точечная пошаговая отладка найденной процедуры на копии.

Почему отладка на сервере 1С не работает

Самые частые симптомы и что с ними делать:

Диагностика: выберите симптом

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

Как выключить отладку и убрать журналы

Разобрались с ошибкой — верните сервер в обычный режим. Забытый -debug и разросшийся техжурнал всплывают через месяц как «сервер тормозит» и «кончилось место на диске».

  1. Удалите ключ -debug (и -http, если добавляли) из ImagePath или из переопределения systemd-юнита.
  2. В нерабочее время перезапустите службу агента. Сеансы пользователей оборвутся, поэтому предупредите сотрудников.
  3. Проверьте командную строку ragent той же командой PowerShell или ps: ключа быть не должно.
  4. Для техжурнала замените содержимое logcfg.xml на пустой конфиг или переименуйте файл.
  5. Подождите 1–2 минуты, пока платформа перечитает настройку и закроет файлы.
  6. Удалите каталог с логами или заархивируйте его, если логи ещё нужны для разбора.

Пустой конфиг, который останавливает запись журнала:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
</config>

Если в logcfg.xml был включён сбор дампов, проверьте и каталог дампов. Дампы рабочих процессов бывают по несколько гигабайт каждый.

Частые вопросы

Можно ли включить отладку на сервере без перезапуска службы?
Нет. Ключ -debug читается агентом только при старте, поэтому нужен перезапуск службы. Технологический журнал перезапуска не требует.
Нужно ли включать отладку для файловой базы?
Нет. В файловом варианте сервер работает внутри клиентского процесса, и конфигуратор отлаживает серверный код без настройки службы.
Видят ли пользователи, что на сервере включена отладка?
Внешне нет. Они замечают только замедление и остановку своего сеанса, если код упёрся в точку останова.
Сколько места занимает технологический журнал?
Журнал только по EXCP обычно укладывается в десятки мегабайт в сутки. Журнал DBMSSQL со всеми свойствами на нагруженной базе может писать гигабайты в час.
Можно ли отлаживать серверный код через веб-клиент?
Да. Для веб-клиента используйте отладку по протоколу HTTP: включите на сервере -debug -http, выберите HTTP в конфигураторе и отметьте веб-клиент в автоподключении.