Многие разработчики сталкиваются с ситуацией, когда первый запрос к опубликованному веб-сервису или HTTP-сервису 1С занимает значительное время (от 10 до 40 секунд), в то время как последующие обращения в рамках того же сеанса отрабатывают мгновенно. Это явление называют «холодным стартом». Разберем подробно причины такого поведения и проанализируем пошаговые инструкции по оптимизации системы для достижения максимальной производительности.
Прежде всего, проведем анализ производительности и выясним причину задержки. Когда мы отправляем первый запрос, веб-сервер (например, IIS или Apache) должен инициализировать расширение 1С, запустить рабочий процесс, установить соединение с сервером 1С, проверить лицензии и создать сеанс информационной базы. Если в базе не настроен пул соединений или не используется утилита управления сеансами, то каждый такой «первый» запрос (после периода бездействия) будет проходить весь этот цикл заново. Рассмотрим, как сократить это время до минимума.
Основным инструментом управления сеансами веб-сервисов является файл default.vrd. В нем описываются параметры пула соединений. Проанализируем ключевые атрибуты, которые необходимо добавить или изменить в секции point:
600 до 1200.Пример настройки пула в файле default.vrd может выглядеть следующим образом:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
base="/MyBase"
ib="Srvr=MyServer;Ref=MyBase;"
enable="true"
poolSize="10"
poolTimeout="600"
waitTimeout="5"/>
Часто причиной «тормозов» является сам веб-сервер IIS, который по умолчанию настроен на экономию ресурсов. Разберем настройки пула приложений (Application Pool):
0. Это предотвратит завершение рабочего процесса w3wp.exe при отсутствии активности.AlwaysRunning. Это заставит процесс запускаться сразу после старта сервера, не дожидаясь первого пользователя.Посмотрим на ситуацию со стороны сети. Часто первый вызов тормозит из-за попыток разрешения имен или поиска прокси. Выполним следующие действия:
Важно помнить, что при создании сеанса для HTTP-сервиса не выполняются обработчики ПриНачалеРаботыСистемы, но всегда выполняется обработчик УстановкаПараметровСеанса в модуле сеанса. Проанализируем код этого обработчика. Если в нем инициализируются тяжелые параметры (RLS, выборки из больших справочников), это замедлит каждый новый вход.
Применим проверку типа клиента, чтобы не выполнять лишний код для веб-запросов:
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
// Если это внешний запрос, минимизируем нагрузку
Если ПараметрыСеанса.ИмяТекущегоПользователя = "" Тогда
// Логика для анонимных или служебных HTTP-запросов
КонецЕсли;
// Инициализируем только то, что действительно нужно
Если ТребуемыеПараметры = Неопределено Тогда
// Тяжелая инициализация для обычных пользователей
Иначе
// Легкая инициализация по требованию
КонецЕсли;
КонецПроцедуры
Если сервер 1С тратит время на поиск лицензии в сети, первый запрос будет «висеть». Выясним причину: по умолчанию менеджер лицензий сканирует всю сеть широковещательными запросами. Для ускорения настроим файл nnhasp.ini на сервере, где установлен 1С:Предприятие.
Укажем конкретный адрес сервера лицензий и запретим поиск по сети:
[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.100 ; IP вашего сервера с ключами
NH_TCPIP_METHOD = TCP
NH_USE_AS_MASTER = Disabled
Если после всех настроек первый вызов все равно кажется медленным, воспользуемся методом искусственного поддержания активности. Создадим простейшее регламентное задание или внешний скрипт, который будет раз в 5–10 минут отправлять пустой запрос (ping) к нашему HTTP-сервису. Это гарантирует, что сеанс в пуле всегда будет активен и готов к работе, а рабочие процессы IIS и 1С не уйдут в спящий режим.
Таким образом, мы рассмотрели комплексный подход к решению проблемы долгого первого отклика. Сочетание правильной настройки пула в default.vrd, оптимизация параметров IIS и исключение лишних действий в УстановкаПараметровСеанса позволяют сократить время отклика веб-сервисов до долей секунды даже при первом обращении.