Приветствуем, коллеги! Сегодня мы подробно рассмотрим и разберем довольно специфическую, но крайне неприятную проблему, с которой сталкиваются разработчики 1С. Проанализируем ситуацию: при попытке включить замер производительности в момент вызова серверных процедур или при открытии форм происходит критическая ошибка, и сеанс может аварийно завершиться. Инструмент оценки производительности зависает или не позволяет корректно снять показатели. Выясним причину такого поведения платформы и решим эту задачу вместе.
Когда возникает любая непонятная ошибка в конфигураторе или режиме предприятия, первое, что мы обычно делаем — пытаемся выполнить базовое обслуживание. Посмотрим на стандартные шаги, которые предпринимают разработчики:
Однако в данном конкретном случае мы увидим, что ни чистка кеша, ни минорное обновление платформы не помогают. Проблема сохраняется и не позволяет использовать встроенный замер производительности. Разберем по шагам, почему это происходит.
Проанализируем техническую суть процесса. Данная проблема не является локальным сбоем вашей базы данных или следствием сильного сжатия сетевого трафика. Это официально зарегистрированная ошибка в ядре платформы 1С. В баг-трекере она числится под кодом 00-00273957.
Суть конфликта кроется во взаимодействии внутренних механизмов 1С с протоколом отладки. Начиная с версий платформы 8.3.14 и 8.3.15, по умолчанию для отладки используется протокол HTTP. Когда мы активируем замер производительности, платформа начинает активно обмениваться служебными пакетами данных между сервером и конфигуратором. При выполнении "тяжелых" серверных вызовов, таких как:
&НаСервере
Процедура ВыполнитьСложныйРасчетНаСервере()
// В этот момент при включенном замере по HTTP может возникнуть крах
// ... выполнение объемных запросов и бизнес-логики ...
КонецПроцедуры
... протокол HTTP может не справиться со спецификой передачи данных профилировщика, что приводит к краху сеанса или невозможности отключить замер.
Рассмотрим самое эффективное решение, которое помогает в 99% случаев. Нам необходимо перевести конфигуратор и сервер 1С со стандартного протокола HTTP на старый, но более стабильный для данных задач сетевой протокол TCP. Протокол TCP использует принципиально иной механизм передачи служебной информации, который не подвержен описанному багу.
Выполним следующие шаги для настройки:
HTTP на TCP/IP.TCP отладку (ключ -debug).Важный нюанс сетевой настройки: Обратите внимание, что протокол TCP более требователен к топологии вашей сети. Если сервер находится за строгим NAT, брандмауэром или защищен антивирусом, отладка может не подключиться. Для бесперебойной работы TCP-отладчика необходимо убедиться, что открыт диапазон портов от 1560 до 1591.
Посмотрим на ситуацию со стороны кода конфигурации. Как мы уже выяснили, простое обновление технологической платформы проблему не решает. Разработчики 1С внесли необходимые исправления не только в платформу, но и в типовые библиотеки. Ошибка часто проявляется из-за некорректного взаимодействия платформенного замера с фоновым замером APDEX, встроенным в конфигурацию.
Если у вас есть возможность обновить саму конфигурацию, сделайте это. Исправления официально добавлены в следующие релизы:
3.1.2.291.2.5.4.94.Интеграция свежей версии БСП устранит программный конфликт, и вы снова сможете использовать HTTP-отладку.
Проанализируем альтернативный обходной путь. Ошибка замера производительности (вызываемого разработчиком из Конфигуратора) часто конфликтует с фоновым замером APDEX (Оценка производительности). Подсистема APDEX встроена в современные типовые конфигурации для того, чтобы замерять время выполнения ключевых операций пользователями в режиме реального времени.
Если по корпоративным стандартам безопасности вы не можете переключить порты на TCP, а обновить БСП прямо сейчас невозможно, рассмотрим следующий подход:
Оценка производительности (или снимите галочки с выполнения ключевых операций).HTTP.APDEX в исходное состояние, если они требуются для мониторинга рабочей базы.Подводя итог, мы выяснили, что ошибка при замере производительности на серверных процедурах решается комплексно. Если вам нужно измерить скорость работы кода "здесь и сейчас", смело переключайте отладчик на протокол TCP. Если же вы нацелены на стратегическое решение проблемы в инфраструктуре — запланируйте обновление Библиотеки стандартных подсистем до актуального релиза. Успешной вам отладки и быстрого кода!