Разрастание логов на сервере из-за отладчика 1С: правда ли это и стоит ли включать отладку на продакшене?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Каждый разработчик 1С рано или поздно сталкивается с ситуацией, когда на рабочем (продуктивном) сервере необходимо локализовать сложную ошибку, воспроизводящуюся только на «боевых» данных. Единственный надежный способ сделать это быстро — запустить сеанс в режиме отладки. Однако системные администраторы часто встают на дыбы, наотрез отказываясь прописывать заветный ключ -debug в параметрах запуска службы сервера 1С. В качестве аргументов приводятся самые разные причины: от «у нас моментально переполнятся диски из-за логов» до «все пользователи тут же зависнут».

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

Миф о разрастании логов 1С: путаница отладки и Технологического журнала

Выясним первопричину классического заявления админов: «При включении отладки логи 1С начнут расти в геометрической прогрессии». Это утверждение является абсолютным заблуждением. В данном случае специалисты путают два принципиально разных механизма платформы:

  1. Режим отладки (ключ запуска -debug). Этот режим лишь открывает TCP/HTTP-порты на сервере приложений для подключения конфигуратора-отладчика и переводит рабочие процессы в состояние ожидания команд отладки. Платформа 1С при этом не начинает писать дополнительные события в свой стандартный Журнал регистрации (файлы .lgf или .lgd).
  2. Технологический журнал 1С (ТЖ). Это специализированный инструмент для анализа технологических проблем (блокировок, утечек памяти, падений процессов). ТЖ настраивается через файл конфигурации logcfg.xml. Если настроить сбор ТЖ некорректно (например, собирать абсолютно все события без фильтрации по свойствам), то сервер действительно начнет генерировать гигабайты текстовых логов каждую минуту, что мгновенно забьет дисковую подсистему.

Рассмотрим для примера структуру простейшего файла logcfg.xml, который настраивает ТЖ на сбор только критических ошибок. Такой лог не перегрузит систему:


<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="C:\v8\logs" history="24">
        <event>
            <eq property="Name" value="EXCP"/>
        </event>
        <property name="All"/>
    </log>
</config>

Таким образом, само по себе добавление ключа -debug в реестр или конфигурационный файл службы никак не влияет на дисковые логи самой платформы 1С.

Реальная угроза №1: Взрывной рост логов транзакций СУБД (SQL .ldf)

Несмотря на то, что логи самой 1С не растут, админы могут быть косвенно правы относительно логов базы данных в СУБД (например, в MS SQL Server). И вот как это происходит на практике.

Проанализируем классический сценарий отладки. Разработчик ставит точку останова в модуле проведения важного документа (например, внутри процедуры ОбработкаПроведения). В этот момент на уровне СУБД открывается транзакция: все таблицы, участвующие в проведении (регистры накопления, бухгалтерии, сведений), блокируются СУБД для обеспечения целостности данных.

Пока программист не спеша ходит по строкам кода в отладчике, изучая значения переменных, происходят следующие процессы:

Посмотрим на условную схему кода, выполнение которого в отладчике замораживает транзакцию:


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    // Блокировка таблиц СУБД начинается здесь
    Движения.ТоварыНаСкладах.Записывать = Истина;
    
    // Точка останова (Breakpoint) установлена на строке ниже:
    // Пока разработчик думает, СУБД блокирует таблицы и раздувает файл .ldf
    Для Каждого СтрокаТЧ Из Товары Цикл
        // Производятся расчеты и запись движений
    КонецЦикла;

КонецПроцедуры

Реальная угроза №2: Отложенная компиляция и инвалидация кэша

В нормальном режиме работы сервер 1С компилирует программные модули конфигурации крупными блоками и кэширует их в оперативной памяти рабочих процессов rphost.exe. Это минимизирует количество обращений к СУБД за метаданными.

При включении режима отладки поведение системы существенно меняется:

Реальная угроза №3: Работа службы сервера отладки (dbgs)

В современных версиях платформы 1С v8.3 (особенно при использовании HTTP-отладки) за маршрутизацию сессий отладки отвечает отдельный процесс — сервер отладки dbgs (или встроенный в rphost модуль).

Если на сервере запущено множество баз и активно работают пользователи, включение HTTP-отладки создает постоянный фоновый трафик опроса (polling) между рабочими процессами сервера и конфигуратором. В некоторых релизах платформы (например, в ветках 8.3.18/8.3.19) фиксировались критические баги, при которых процесс dbgs.exe начинал бесконтрольно потреблять до 100% ресурсов процессора или приводил к утечкам оперативной памяти, что приводило к падению всего кластера 1С.

Разбор критической конфигурации сервера: когда отладка смертельно опасна

Рассмотрим реальный пример конфигурации «проблемного» сервера из сообщения №20 темы обсуждения:

Разберем по шагам, почему на таком сервере включение -debug гарантированно «убьет» производительность:

  1. Дисковый коллапс. Обычные HDD в RAID 1 не справляются даже с базовыми запросами 50 терминальных пользователей 1С и SQL. Включение отладки увеличивает дисковую активность (из-за постоянного перестроения кэша метаданных на диске в каталоге srvinfo). Очередь к диску вырастет, терминальные сессии пользователей начнут зависать в состоянии «Не отвечает».
  2. Дефицит оперативной памяти. 32 ГБ крайне мало для СУБД, 4 процессов 1С и 50 сессий пользователей. Терминальные пользователи и так забирают под себя всю память. Попытка компилировать модули «на лету» в режиме отладки потребует выделения дополнительных объемов ОЗУ под рабочие процессы rphost.exe, что приведет сервер в состояние жесткого свопинга (сброса памяти на медленный диск).
  3. Контекстное переключение ядер процессора. Процессоры Xeon E5506 будут непрерывно переключать контексты между терминальными сессиями Windows, СУБД и процессами 1С. Сетевой стек отладки добьет процессорную мощность до 100%.

В такой ситуации системный администратор абсолютно прав: включать отладку на этом «живом» сервере категорически запрещено. Однако аргументировать это нужно не «ростом логов 1С», а аппаратным ограничением ресурсов и рисками глухих блокировок СУБД.

Как безопасно организовать процесс отладки

Что делать разработчику, если отладка жизненно необходима, а сервер слишком слаб или критически важен для бизнеса? Разберем основные альтернативные подходы:

Решение 1. Создание локальной копии базы данных

Самый надежный и безопасный вариант. Разработчик выгружает резервную копию рабочей базы (файл .dt) или делает резервную копию средствами SQL и разворачивает ее локально на своем рабочем компьютере (в файловом варианте или на персональном сервере СУБД). Никакие действия разработчика не затронут реальных пользователей.

Решение 2. Запуск дополнительного инстанса сервера 1С на другом порту

Если развернуть базу локально невозможно (например, из-за гигантского объема данных или интеграции с внешними системами), можно запустить на том же физическом сервере вторую службу «1С:Предприятие» на нестандартных портах (например, порты 1640, 1641 вместо стандартных 1540, 1541).

Для этой службы прописывается ключ -debug. В этот кластер добавляется только тестовая копия базы. Основной рабочий кластер продолжает функционировать на стандартных портах БЕЗ ключа отладки. Это защитит пользователей рабочей базы от случайных блокировок и падения производительности.

Решение 3. Строгий регламент отладки в транзакциях

Если администраторы все же согласились временно включить -debug на рабочем сервере, разработчик обязан соблюдать строгие правила безопасности:

← На главную