Серверная отладка и техжурнал 1С 8.3: от ключа службы до чтения логов
Содержание
Чтобы включить отладку на сервере 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). Её командная строка хранится в реестре.
- Откройте
regeditот имени администратора. - Перейдите в ветку
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\и найдите раздел службы агента 1С. - Откройте параметр
ImagePath. - Добавьте ключ
-debugпосле пути кragent.exe. - Перезапустите службу в оснастке
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.
Подключение конфигуратора к серверной отладке
Сервер готов, теперь к нему нужно подключиться из конфигуратора.
- Откройте базу в конфигураторе.
- Проверьте протокол:
Сервис → Параметры, раздел про отладку. Выберите тот же протокол, что на сервере. - Откройте окно
Отладка → Подключение. Появится список «Предметы отладки». - Нажмите кнопку автоматического подключения и отметьте серверные предметы, а также тонкий клиент.
- Запустите клиент кнопкой
Отладка → Начать отладкуили просто откройте базу у пользователя: при автоподключении сеанс попадёт в список сам. - Поставьте точку останова (
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 и разросшийся техжурнал всплывают через месяц как «сервер тормозит» и «кончилось место на диске».
- Удалите ключ
-debug(и-http, если добавляли) изImagePathили из переопределения systemd-юнита. - В нерабочее время перезапустите службу агента. Сеансы пользователей оборвутся, поэтому предупредите сотрудников.
- Проверьте командную строку
ragentтой же командой PowerShell илиps: ключа быть не должно. - Для техжурнала замените содержимое
logcfg.xmlна пустой конфиг или переименуйте файл. - Подождите 1–2 минуты, пока платформа перечитает настройку и закроет файлы.
- Удалите каталог с логами или заархивируйте его, если логи ещё нужны для разбора.
Пустой конфиг, который останавливает запись журнала:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
</config>
Если в logcfg.xml был включён сбор дампов, проверьте и каталог дампов. Дампы рабочих процессов бывают по несколько гигабайт каждый.
Частые вопросы
Можно ли включить отладку на сервере без перезапуска службы?
Нужно ли включать отладку для файловой базы?
Видят ли пользователи, что на сервере включена отладка?
Сколько места занимает технологический журнал?
Можно ли отлаживать серверный код через веб-клиент?
-debug -http, выберите HTTP в конфигураторе и отметьте веб-клиент в автоподключении.