Почему базы 1С зависают при запуске через веб-браузер и как это исправить?

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

Запуск информационных баз 1С через веб-браузер — это удобный инструмент для организации удаленной работы сотрудников. Однако системные администраторы часто сталкиваются с неприятной проблемой: при подключении через веб-клиент (особенно через VPN) загрузка базы «зависает» на середине (на заставке или на 50% шкалы), в то время как тонкий клиент через тот же самый веб-сервер запускается без каких-либо нареканий.

Особенно остро эта проблема проявляется на «тяжелых» конфигурациях, таких как 1С:Бухгалтерия предприятия 3.0 (БП 3.0), при использовании веб-сервера Apache старых версий (например, Apache 2.2 на CentOS) и баз данных под управлением PostgreSQL.

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

Метод 1. Сбой кэша сеансовых данных (папки snccntx)

Это одна из самых распространенных внутренних проблем платформы 1С:Предприятие 8.3 (особенно версий 8.3.15–8.3.16) в клиент-серверном варианте работы.

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

Для решения этой проблемы нам необходимо принудительно очистить сеансовый кэш на сервере CentOS. Разберем этот процесс по шагам:

  1. Подключимся к серверу CentOS по SSH с правами суперпользователя.
  2. Остановим службу сервера 1С:Предприятия. Для этого выполним команду:
    
    systemctl stop srv1cv83
    
    Примечание: имя службы может отличаться в зависимости от версии платформы (например, srv1cv8-8.3.16.1224).
  3. Перейдем в каталог кластера 1С. По умолчанию в Linux он располагается по пути:
    
    cd /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/
    
  4. Найдем все подкаталоги, имена которых начинаются с префикса snccntx. В этих папках и хранятся сеансовые данные. Полностью удалим их с помощью команды:
    
    rm -rf snccntx*
    
    Важно: не удаляйте другие файлы и папки в каталоге кластера (например, файлы конфигурации кластера 1CV8Reg.lst), так как это приведет к потере настроек списка баз в кластере.
  5. Снова запустим службу сервера 1С:
    
    systemctl start srv1cv83
    

После запуска службы папки snccntx будут созданы автоматически с чистыми, неповрежденными индексами. Проверим запуск базы через браузер.

Метод 2. Проблема отдачи тяжелой статики веб-сервером Apache (EnableSendfile)

Конфигурация 1С:Бухгалтерия 3.0 содержит колоссальное количество модулей, стилей и скриптов. При первом запуске веб-клиента браузер должен скачать на локальный компьютер пользователя огромный массив статических JS-файлов, формирующих интерфейс программы.

Выясним причину: в веб-сервере Apache по умолчанию активированы механизмы оптимизации ядра ОС Linux для отправки файлов в сеть в обход пользовательского пространства — параметры EnableSendfile и EnableMMAP. При работе пользователей через VPN-туннели или при использовании виртуальных сетевых интерфейсов эти механизмы часто работают некорректно: файлы разметки и JS-скрипты передаются «битыми» или обрезаются. Тонкий клиент при этом работает отлично, так как весь интерфейс у него уже скомпилирован локально, а веб-клиент зависает на 50%, поскольку браузер не может до конца загрузить главный исполняемый скрипт интерфейса 1С.

Чтобы исправить это, нам нужно отключить данные оптимизации в конфигурационном файле Apache:

  1. Откроем конфигурационный файл Apache (в CentOS обычно это /etc/httpd/conf/httpd.conf) с помощью текстового редактора:
    
    nano /etc/httpd/conf/httpd.conf
    
  2. Найдем в файле директивы EnableMMAP и EnableSendfile. Если они закомментированы символом #, раскомментируем их. Если их нет, добавим в конец файла или внутрь глобальной секции конфигурации следующие строки:
    
    EnableMMAP Off
    EnableSendfile Off
    
  3. Сохраним изменения в файле (в nano: Ctrl+O, затем Enter, для выхода — Ctrl+X).
  4. Проверим конфигурацию Apache на предмет синтаксических ошибок:
    
    httpd -t
    
  5. Если система выдала ответ Syntax OK, перезапустим веб-сервер для применения настроек:
    
    systemctl restart httpd
    

Метод 3. Проблемы с MTU и фрагментацией пакетов в VPN

Если пользователи работают с системой удаленно через VPN-соединение, то весь трафик проходит через дополнительный виртуальный сетевой интерфейс, который оборачивает пакеты данных в шифрованный туннель.

Выясним причину: шифрование VPN накладывает свои служебные заголовки, из-за чего максимальный размер полезного блока данных в сетевом пакете (MTU) снижается со стандартных 1500 байт до 1400–1450 байт. Если сетевое оборудование или брандмауэр на стороне сервера CentOS блокирует ICMP-сообщения (что мешает автоматическому определению размера пакета — Path MTU Discovery), веб-сервер будет пытаться отправить браузеру стандартные пакеты по 1500 байт. На входе в VPN-туннель эти пакеты будут отбрасываться без предупреждения. Веб-клиент при загрузке тяжелой статики БП 3.0 мгновенно зависнет.

Проанализируем ситуацию и настроим принудительное уменьшение размера TCP-сегментов (MSS Clamping) на стороне сервера CentOS:

  1. Для диагностики выполним пинг с компьютера проблемного пользователя до веб-сервера 1С с запретом фрагментации пакета:
    
    ping <IP_адрес_сервера> -f -l 1400
    
    Если пакеты размером 1400 проходят, а стандартные (1500) теряются, проблема со 100% вероятностью заключается в MTU.
  2. Чтобы решить эту проблему на уровне сервера Linux без перенастройки каждого клиентского ПК, применим правило сжатия MSS через iptables. Это заставит сервер принудительно согласовывать меньший размер пакетов при установлении TCP-соединений:
    
    iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    
  3. Если веб-сервер сам является конечной точкой VPN-туннеля, применим аналогичное правило для цепочки OUTPUT:
    
    iptables -t mangle -A OUTPUT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    
  4. Сохраним правила брандмауэра, чтобы они не сбросились после перезагрузки сервера CentOS.

Метод 4. Особенности раздачи лицензий сервером 1С:Предприятия

Еще одно важное различие между работой тонкого клиента и веб-клиента кроется в механизме получения клиентских лицензий 1С.

Выясним причину: тонкий клиент умеет запрашивать лицензии локально (искать USB-ключи, установленные непосредственно в компьютер пользователя, или активированные на его ПК программные лицензии). Веб-клиент, работающий внутри веб-браузера, физически не имеет доступа к оборудованию клиентского компьютера. Он может получить лицензию только от сервера 1С или от модуля веб-сервера. Если в свойствах информационной базы отключена раздача лицензий сервером, тонкий клиент успешно запустится (найдя локальный ключ), а браузер бесконечно зависнет на этапе запуска без отображения ошибок.

Рассмотрим, как включить раздачу лицензий сервером:

  1. Запустим консоль «Администрирование серверов 1С:Предприятия».
  2. Перейдем к списку информационных баз и найдем ту базу БП 3.0, которая зависает при старте в браузере.
  3. Откроем свойства этой информационной базы.
  4. Найдем параметр «Разрешить выдачу лицензий сервером 1С:Предприятия» (в английской версии — «Allow issuing licenses by 1C:Enterprise server»).
  5. Установим значение этого параметра в положение «Да» (по умолчанию может быть установлено значение «Нет» или «Использовать настройки по умолчанию»).
  6. Нажмем кнопку «ОК» для сохранения изменений. Перезапуск службы сервера 1С при этом не требуется.

Метод 5. Устранение лимитов памяти устаревшей версии Apache 2.2

Использование устаревших версий ПО — это критический фактор нестабильности ИТ-инфраструктуры. Версия Apache 2.2 является устаревшей и имеет серьезные архитектурные ограничения.

Выясним причину: если на сервере CentOS развернута 32-битная (x32) версия Apache 2.2, то один процесс веб-сервера физически не может адресовать более 2-3 ГБ оперативной памяти. Конфигурация 1С:Бухгалтерия 3.0 при работе нескольких пользователей через веб-клиент быстро исчерпывает этот лимит при инициализации тяжелых сессий. Процесс веб-сервера упирается в ограничение памяти, начинает аварийно завершаться или игнорировать новые запросы, переводя браузеры пользователей в режим бесконечного ожидания ответа.

Для долгосрочного и стабильного решения этой проблемы настоятельно рекомендуется выполнить обновление веб-сервера:

  1. Совместно с системными администраторами обновить веб-сервер Apache до актуальной версии Apache 2.4 x64.
  2. Настроить Apache 2.4 на работу в производительном многопоточном режиме MPM Event или MPM Worker, что значительно снизит потребление оперативной памяти под нагрузкой по сравнению со старым режимом MPM Prefork.
  3. Переопубликовать все информационные базы 1С с использованием актуальных 64-битных библиотек расширения веб-сервера 1С (файл модуля интеграции wsap24.so вместо устаревшего wsap22.so).

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

← На главную