Работа 1С:Предприятие в распределенной сети через VPN-туннели часто сопровождается существенными задержками. Пользователи жалуются на длительный запуск (до 30 минут) и «зависания» при выполнении простейших операций, таких как открытие формы или пробитие чека. В этой статье мы подробно разберем причины низкой производительности и рассмотрим пошаговый алгоритм оптимизации системы, начиная от сетевых настроек и заканчивая правками в программном коде.
Первым делом проанализируем состояние канала связи. Часто системные администраторы рапортуют о «хорошем интернете», основываясь лишь на скорости загрузки данных. Однако для 1С критически важен не только объем передаваемой информации, но и задержки (пинг), а также целостность пакетов. При работе через VPN возникает специфическая проблема — фрагментация пакетов из-за MTU.
VPN-туннель добавляет свои служебные заголовки к каждому сетевому пакету. Если стандартный размер пакета MTU составляет 1500 байт, то после упаковки в VPN он превышает этот предел и маршрутизаторам приходится разбивать его на части (фрагментировать). Это создает колоссальную нагрузку на процессоры роутеров и вызывает задержки в интерфейсе 1С. Рассмотрим, как это исправить:
ping -f -l 1472 [адрес_сервера]. Если пакеты не проходят, будем уменьшать значение 1472 до тех пор, пока не найдем оптимальный размер.MTU на сетевых интерфейсах сервера и клиентских машин в диапазоне 1350–1400 байт. Это «освободит» место для VPN-заголовков и «оживит» передачу данных.Если 1С «висит» при входе по 20–30 минут, это верный признак того, что платформа не может быстро найти ключ защиты. По умолчанию 1С опрашивает всю сеть широковещательными запросами, которые в VPN-сетях часто блокируются или работают крайне медленно. Проанализируем решение этой задачи через настройку файла nethasp.ini.
Найдем файл nethasp.ini на клиентской машине (обычно в папке с установленной платформой или в профиле пользователя) и внесем в него следующие изменения, чтобы исключить лишние таймауты:
[NH_COMMON]
NH_TCPIP = Enabled
[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.100 ; Укажите здесь IP-адрес вашего сервера лицензий
NH_TCPIP_METHOD = TCP
NH_USE_BROADCAST = Disabled
Важный момент: отключение параметра NH_USE_BROADCAST заставляет 1С обращаться напрямую к серверу, не тратя время на «простукивание» всей сети. Это сокращает время запуска с десятков минут до нескольких секунд.
Рассмотрим ситуацию, когда сервер показывает общую загрузку ЦП всего 13%, но 1С все равно тормозит. Посмотрим на график загрузки по ядрам. В 1С многие операции выполняются в один поток, поэтому одно ядро может быть загружено на 100%, в то время как остальные простаивают. Общая картина при этом будет выглядеть обманчиво спокойной.
Выясним причину и применим следующие меры оптимизации сервера:
Max Degree of Parallelism (MAXDOP) в значение 1. Это исключит избыточные затраты ресурсов на распараллеливание простых запросов 1С, что часто замедляет работу системы.Если пинг до магазинов нестабилен или превышает 50–100 мс, работа через тонкий клиент по протоколу TCP будет некомфортной. В такой ситуации наиболее эффективным решением является публикация информационной базы на веб-сервере. Протокол HTTP гораздо устойчивее к задержкам и потере пакетов.
Разберем преимущества этого метода:
Часто проблема кроется не только в железе, но и в неоптимальном коде, который не рассчитан на большие объемы данных или работу в распределенной сети. Проанализируем пример оптимизации механизма РМК. Если типовой механизм при открытии делает тяжелые запросы в цикле или получает лишние данные с сервера, его нужно переписать.
Например, вместо получения всех данных объекта через ЭтотОбъект или ПолучитьОбъект(), используем выборку конкретных полей через запрос. Рассмотрим пример правильного обращения к данным:
// Неправильно: передача тяжелого объекта с сервера на клиент
ОбъектКассы = Справочники.Кассы.НайтиПоНаименованию("Основная").ПолучитьОбъект();
// Правильно: получение только нужных реквизитов через запрос
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Кассы.Ссылка КАК Ссылка,
| Кассы.Владелец КАК Магазин
|ИЗ
| Справочник.Кассы КАК Кассы
|ГДЕ
| Кассы.Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование", "Основная");
Результат = Запрос.Выполнить().Выбрать();
Подобная оптимизация только одного модуля РМК может ускорить работу интерфейса в 3 и более раз, особенно в условиях медленного канала связи.
В завершение проанализируем «мелочи», которые в совокупности дают ощутимый прирост скорости:
AppData\Local\1C на клиентских ПК. Раздутый кэш — частая причина «затупов» при открытии форм.rphost.exe, sqlservr.exe и расширения файлов .1CD, .1CL, .mdf, .ldf. Проверка этих файлов «на лету» блокирует работу дисковой подсистемы.Таким образом, мы выяснили, что ускорение 1С — это комплексный процесс. Сочетание настройки сетевых параметров (MTU/MSS), оптимизации лицензирования (nethasp.ini) и грамотной публикации на веб-сервере позволяет добиться стабильной работы даже в самых сложных условиях удаленного доступа.