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

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

При оптимизации и поиске узких мест в конфигурациях 1С разработчики часто используют встроенный инструмент Замер производительности. Однако в клиент-серверном варианте работы можно столкнуться с ситуацией, когда строка вызова процедуры в общем модуле фиксируется, а при переходе внутрь самого модуля строки не содержат данных о количестве вызовов и времени выполнения (слева от строк кода отсутствуют числовые показатели).

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

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

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

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


ПолныеПраваЗК.ЗаписатьТекущиеКадровыеДанныеСотрудникаОрганизации(Отказ, Замещение, Ложь, Отбор.Регистратор.Значение);

Если модуль ПолныеПраваЗК имеет свойства Сервер или Привилегированный, его тело выполняется на стороне сервера. Сам вызов из клиентской формы замер фиксирует, но детальную статистику выполнения строк внутри серверной процедуры конфигуратор получить не может, пока на сервере не включен режим отладки.

Инструкция: как включить отладку на сервере 1С под управлением ОС Windows

Для включения отладки на сервере под управлением Windows выполним следующие шаги:

  1. Остановим службу сервера 1С:Предприятия через консоль управления службами (services.msc) или убедимся, что пользователи отключены от рабочей базы.
  2. Откроем редактор реестра: нажмем сочетание клавиш Win + R, введем regedit и нажмем Enter.
  3. Перейдем к ветке реестра, отвечающей за службу агента сервера: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (имя службы может содержать архитектуру и версию, например, (x86-64)).
  4. Найдем строковый параметр ImagePath, который содержит команду запуска службы.
  5. Отредактируем значение параметра ImagePath, добавив ключ -debug. Например, если строка запуска имела вид: "C:\Program Files\1cv8\8.3.X.XXXX\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" то после добавления ключа она должна выглядеть так: "C:\Program Files\1cv8\8.3.X.XXXX\bin\ragent.exe" -srvc -agent -debug -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
  6. Сохраним изменения в реестре и запустим службу сервера 1С:Предприятия заново.

Инструкция: как включить отладку на сервере 1С под управлением Linux

Если кластер серверов 1С развернут на платформе Linux, порядок действий зависит от используемой системы инициализации:

  1. При использовании конфигурационных файлов службы откроем для редактирования файл параметров (например, /etc/default/srv1cv83 или /etc/sysconfig/srv1cv83).
  2. Установим или раскомментируем параметр: SRV1CV8_DEBUG=1.
  3. Если служба управляется через systemd, отредактируем unit-файл службы, добавив флаг -debug в директиву ExecStart.
  4. Выполним команду systemctl daemon-reload и перезапустим службу 1С командой systemctl restart srv1cv83.

Настройка конфигуратора для корректного замера серверного кода

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

  1. В конфигураторе перейдем в главное меню: Отладка → Подключение...
  2. Нажмем кнопку Настройка автоматического подключения...
  3. Установим флаги для типов предметов отладки: Сессии, Фоновые задания, Серверные контексты (а также Web-сервисы и HTTP-сервисы, если замеряется их работа).
  4. Нажмем ОК и запустим сеанс «1С:Предприятие» в режиме отладки (клавиша F5).

После выполнения указанных настроек повторный замер производительности корректно отобразит время и количество строк при выполнении серверных процедур и функций.

Особенности и правила безопасности при отладке на сервере

Обратим внимание на важные правила эксплуатации режима отладки:

  1. Влияние на производительность: включение флага -debug создает дополнительную нагрузку на рабочие процессы кластера серверов rmngr и rphost. Не рекомендуется оставлять режим отладки включенным на постоянной основе на высоконагруженных продуктивных серверах.
  2. Протоколы отладки: начиная с платформы 8.3.7, доступна отладка по протоколу HTTP. При ее использовании требуется корректная настройка отдельного сервера отладки (dbgs) или указание его параметров в свойствах кластера.
  3. Привилегированные модули: код, исполняемый в привилегированном режиме без контроля прав доступа, фиксируется замером только при включенной отладке на сервере.

Альтернативные способы замера времени выполнения

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

  1. Программный замер в коде: фиксация времени начала и окончания вызова с помощью системных функций:
    
    ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
    ПолныеПраваЗК.ЗаписатьТекущиеКадровыеДанныеСотрудникаОрганизации(Отказ, Замещение, Ложь, Отбор.Регистратор.Значение);
    Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала;
    ЗаписьЖурналаРегистрации("ЗамерВремени", УровеньЖурналаРегистрации.Информация,,, "Длительность: " + Длительность + " мс");
    
  2. Технологический журнал: настройка файла logcfg.xml на сбор событий CALL, SCALL и SDBL позволяет детально зафиксировать длительность вызовов без необходимости перезапуска сервера в режиме отладки.
← На главную