Как исправить ошибку при включении замера производительности в 1С?

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

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

Первичная диагностика: почему стандартные методы не работают?

Когда возникает любая непонятная ошибка в конфигураторе или режиме предприятия, первое, что мы обычно делаем — пытаемся выполнить базовое обслуживание. Посмотрим на стандартные шаги, которые предпринимают разработчики:

  1. Очистка серверного и клиентского кеша.
  2. Обновление платформы на более свежий релиз (например, переход с версии 14 на 15).
  3. Установка актуальных библиотек Microsoft Visual C++.

Однако в данном конкретном случае мы увидим, что ни чистка кеша, ни минорное обновление платформы не помогают. Проблема сохраняется и не позволяет использовать встроенный замер производительности. Разберем по шагам, почему это происходит.

Истинная причина проблемы: конфликт протоколов отладки

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

Суть конфликта кроется во взаимодействии внутренних механизмов 1С с протоколом отладки. Начиная с версий платформы 8.3.14 и 8.3.15, по умолчанию для отладки используется протокол HTTP. Когда мы активируем замер производительности, платформа начинает активно обмениваться служебными пакетами данных между сервером и конфигуратором. При выполнении "тяжелых" серверных вызовов, таких как:


&НаСервере
Процедура ВыполнитьСложныйРасчетНаСервере()
    // В этот момент при включенном замере по HTTP может возникнуть крах
    // ... выполнение объемных запросов и бизнес-логики ...
КонецПроцедуры

... протокол HTTP может не справиться со спецификой передачи данных профилировщика, что приводит к краху сеанса или невозможности отключить замер.

Решение 1: Переход на TCP-отладку (Самый быстрый и надежный способ)

Рассмотрим самое эффективное решение, которое помогает в 99% случаев. Нам необходимо перевести конфигуратор и сервер 1С со стандартного протокола HTTP на старый, но более стабильный для данных задач сетевой протокол TCP. Протокол TCP использует принципиально иной механизм передачи служебной информации, который не подвержен описанному багу.

Выполним следующие шаги для настройки:

  1. Откройте Конфигуратор вашей базы данных.
  2. Перейдите в меню Сервис -> Параметры.
  3. Откройте вкладку Запуск 1С:Предприятия и перейдите в раздел Дополнительные (или раздел Отладка, в зависимости от версии).
  4. Найдите настройки протокола отладки и переключите флаг с HTTP на TCP/IP.
  5. Обязательно убедитесь, что служба сервера 1С также запущена с ключом, разрешающим TCP отладку (ключ -debug).
  6. Перезапустите сеанс Конфигуратора и пользовательский сеанс.

Важный нюанс сетевой настройки: Обратите внимание, что протокол TCP более требователен к топологии вашей сети. Если сервер находится за строгим NAT, брандмауэром или защищен антивирусом, отладка может не подключиться. Для бесперебойной работы TCP-отладчика необходимо убедиться, что открыт диапазон портов от 1560 до 1591.

Решение 2: Обновление конфигурации (БСП)

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

Если у вас есть возможность обновить саму конфигурацию, сделайте это. Исправления официально добавлены в следующие релизы:

  1. Для 1С:Библиотека стандартных подсистем (БСП) — исправление включено начиная с релиза 3.1.2.291.
  2. Для 1С:ERP Управление предприятием — исправление доступно начиная с версии 2.5.4.94.

Интеграция свежей версии БСП устранит программный конфликт, и вы снова сможете использовать HTTP-отладку.

Решение 3: Временное отключение подсистемы APDEX

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

Если по корпоративным стандартам безопасности вы не можете переключить порты на TCP, а обновить БСП прямо сейчас невозможно, рассмотрим следующий подход:

  1. Зайдите в базу в режиме 1С:Предприятие под правами Администратора.
  2. Перейдите в раздел Администрирование -> Обслуживание -> Оценка производительности.
  3. Снимите флажок Оценка производительности (или снимите галочки с выполнения ключевых операций).
  4. После этого фоновые замеры конфигурации прекратятся, и вы сможете корректно использовать платформенный Замер производительности через Конфигуратор по протоколу HTTP.
  5. По окончании профилирования кода не забудьте вернуть настройки APDEX в исходное состояние, если они требуются для мониторинга рабочей базы.

Подводя итог, мы выяснили, что ошибка при замере производительности на серверных процедурах решается комплексно. Если вам нужно измерить скорость работы кода "здесь и сейчас", смело переключайте отладчик на протокол TCP. Если же вы нацелены на стратегическое решение проблемы в инфраструктуре — запланируйте обновление Библиотеки стандартных подсистем до актуального релиза. Успешной вам отладки и быстрого кода!

← На главную