При оптимизации и поиске узких мест в конфигурациях 1С разработчики часто используют встроенный инструмент Замер производительности. Однако в клиент-серверном варианте работы можно столкнуться с ситуацией, когда строка вызова процедуры в общем модуле фиксируется, а при переходе внутрь самого модуля строки не содержат данных о количестве вызовов и времени выполнения (слева от строк кода отсутствуют числовые показатели).
Разберем, почему возникает такое поведение платформы, как корректно включить режим отладки на сервере 1С:Предприятия и какие дополнительные параметры необходимо настроить для полноценного профилирования серверного кода.
В клиент-серверной архитектуре платформа 1С разделяет выполнение кода между клиентом и сервером. Если замер производительности запускается на клиенте, а служба сервера 1С:Предприятия работает в стандартном штатном режиме (без специального ключа отладки), серверные вызовы выполняются без передачи отладочной информации в конфигуратор.
Посмотрим на типовой пример кода, вызывающего процедуру общего модуля:
ПолныеПраваЗК.ЗаписатьТекущиеКадровыеДанныеСотрудникаОрганизации(Отказ, Замещение, Ложь, Отбор.Регистратор.Значение);
Если модуль ПолныеПраваЗК имеет свойства Сервер или Привилегированный, его тело выполняется на стороне сервера. Сам вызов из клиентской формы замер фиксирует, но детальную статистику выполнения строк внутри серверной процедуры конфигуратор получить не может, пока на сервере не включен режим отладки.
Для включения отладки на сервере под управлением Windows выполним следующие шаги:
services.msc) или убедимся, что пользователи отключены от рабочей базы.regedit и нажмем Enter.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (имя службы может содержать архитектуру и версию, например, (x86-64)).ImagePath, который содержит команду запуска службы.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"Если кластер серверов 1С развернут на платформе Linux, порядок действий зависит от используемой системы инициализации:
/etc/default/srv1cv83 или /etc/sysconfig/srv1cv83).SRV1CV8_DEBUG=1.systemd, отредактируем unit-файл службы, добавив флаг -debug в директиву ExecStart.systemctl daemon-reload и перезапустим службу 1С командой systemctl restart srv1cv83.После перезапуска сервера с флагом -debug необходимо проверить параметры подключения в конфигураторе, чтобы замер производительности перехватывал все требуемые контексты:
После выполнения указанных настроек повторный замер производительности корректно отобразит время и количество строк при выполнении серверных процедур и функций.
Обратим внимание на важные правила эксплуатации режима отладки:
-debug создает дополнительную нагрузку на рабочие процессы кластера серверов rmngr и rphost. Не рекомендуется оставлять режим отладки включенным на постоянной основе на высоконагруженных продуктивных серверах.dbgs) или указание его параметров в свойствах кластера.Если на сервере нельзя перезапускать службу или включать отладку, можно использовать альтернативные методы фиксации производительности:
ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
ПолныеПраваЗК.ЗаписатьТекущиеКадровыеДанныеСотрудникаОрганизации(Отказ, Замещение, Ложь, Отбор.Регистратор.Значение);
Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала;
ЗаписьЖурналаРегистрации("ЗамерВремени", УровеньЖурналаРегистрации.Информация,,, "Длительность: " + Длительность + " мс");
logcfg.xml на сбор событий CALL, SCALL и SDBL позволяет детально зафиксировать длительность вызовов без необходимости перезапуска сервера в режиме отладки.