Почему зависают пользователи в 1С и не хватает лицензий при работе через веб-сервер?

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

Ситуация, когда при наличии свободных лицензий шестой пользователь не может войти в систему, а работающие сеансы внезапно «зависают», является типичной для файловых баз 1С:Предприятие, опубликованных через веб-сервер (Apache или IIS). В данной статье мы подробно разберем, почему возникают такие блокировки, как работает механизм раздачи лицензий веб-сервером и какие настройки помогут стабилизировать работу системы «1С:Розница» или любой другой конфигурации на платформе 8.3.

Разберем механизм подсчета лицензий веб-сервером

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

Рассмотрим, как это влияет на доступность: если у вас куплено 6 лицензий, а в системе активно работают 5 человек, но один из них недавно переподключился из-за сбоя сети, веб-сервер может считать, что занято 6 лицензий (5 активных + 1 «повисшая»). В итоге шестой реальный пользователь получит отказ в доступе. Помогает в этом случае только перезагрузка службы веб-сервера или всего сервера целиком, что и наблюдалось в исходной ситуации.

Настройка файла публикации default.vrd

Для управления временем жизни сеансов и оптимизации пула соединений нам необходимо отредактировать файл default.vrd, который создается при публикации базы. Проанализируем основные параметры, которые помогут избежать зависаний.

Найдем в файле секцию <point> и добавим или отредактируем следующие атрибуты:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/MyBase"
       ib="File=&quot;C:\Base1C&quot;;">
    <ws>
        <point name="Common"
               alias="common.1cws"
               sessionMaxAge="900"
               poolSize="10"
               poolTimeout="60"/>
    </ws>
</point>

Разберем подробнее, за что отвечают эти параметры:

  1. sessionMaxAge — это максимальное время «жизни» сеанса в секундах. Установив значение 900 (15 минут), мы заставим сервер быстрее освобождать лицензии, если активность пользователя прекратилась.
  2. poolSize — определяет размер пула соединений. Для файловой базы важно, чтобы это значение не было слишком большим, иначе конкуренция за файл 1Cv8.1cd приведет к блокировкам.
  3. poolTimeout — время ожидания освобождения соединения из пула.

Особенности файловой базы и веб-публикации

Выясним причину, почему база «отвисает» через длительное время (например, через 40 минут). Файловая база данных крайне чувствительна к количеству одновременных обращений. В отличие от клиент-серверного варианта (SQL), где СУБД управляет очередями и транзакциями на уровне строк, файловая база часто блокирует таблицы целиком или даже весь файл при выполнении тяжелых операций.

Если один пользователь запустил сложный отчет (например, по остаткам в «1С:Розница») или выполняется фоновое РегламентноеЗадание, веб-сервер создает очередь запросов. Все остальные пользователи будут видеть «песочные часы» или белое окно до тех пор, пока первая операция не завершится. Важно помнить: в файловой базе через веб-сервер регламентные задания могут запускаться в отдельном скрытом сеансе, который также потребляет одну лицензию из ваших шести доступных.

Проблемы платформы 8.3.11 и кэширования

Версия платформы 8.3.11 является достаточно старой. В ней зафиксированы проблемы с утечкой памяти при длительной работе веб-сервисов. Проанализируем состояние сервера: если оперативная память занята процессами веб-сервера (w3wp.exe для IIS или httpd.exe для Apache) и не освобождается, это приводит к критическому замедлению работы.

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

Рекомендуется настроить скрипт автоматической очистки этих папок при перезагрузке сервера.

Настройка веб-сервера: IIS против Apache

Если вы используете IIS (Internet Information Services), основной причиной зависаний может быть «Пул приложений» (Application Pool). По умолчанию он может уходить в спящий режим при отсутствии активности или иметь некорректные настройки переработки (recycling).

Рассмотрим шаги по оптимизации IIS:

  1. Откройте Диспетчер IIS.
  2. Перейдите в «Пулы приложений», выберите пул вашей базы.
  3. В «Дополнительных параметрах» установите «Режим запуска» (Start Mode) в значение AlwaysRunning.
  4. Установите «Тайм-аут бездействия» (Idle Time-out) в 0.
  5. Настройте «Указанные моменты времени» для переработки пула на ночное время (например, в 03:00), чтобы принудительно очищать память раз в сутки.

Если используется Apache, обратите внимание на параметр KeepAlive. Если он включен (On), сервер держит TCP-соединение открытым для каждого запроса. При большом количестве мелких запросов от тонкого клиента это может забить лимит соединений веб-сервера. Попробуйте установить KeepAlive Off или уменьшить KeepAliveTimeout до 2-5 секунд.

Влияние антивирусного ПО и копий баз данных

Проанализируем ситуацию с блокировками на уровне файловой системы. Поскольку веб-сервер постоянно читает и записывает данные в файл 1Cv8.1cd, любое стороннее вмешательство может вызвать deadlock (взаимную блокировку). Если в момент записи антивирус решит проверить файл базы на наличие угроз, 1С не сможет получить к нему доступ и «зависнет».

Необходимо добавить в исключения антивируса:

Также обратите внимание на работу в копии базы. Если вы запускаете копию на том же сервере, она создает конкурентную нагрузку на дисковую подсистему. Если диск (особенно если это HDD, а не SSD) не справляется с очередью чтения/записи, «фризы» будут ощущать все пользователи основной базы.

Рекомендации по регламенту работы

Чтобы минимизировать количество зависаний, внедрим следующие правила для пользователей и администраторов:

  1. Корректный выход: Приучите сотрудников закрывать программу через меню Файл - Завершить работу, а не просто закрытием вкладки браузера или окна терминала. Это гарантирует немедленное освобождение лицензии на стороне веб-сервера.
  2. Мониторинг сеансов: Регулярно проверяйте список активных пользователей через «Администрирование — Обслуживание — Активные пользователи». Если вы видите там сеансы, которые физически не работают, завершайте их принудительно.
  3. Автоматизация: Как было предложено в обсуждении, настройте ежедневный автоматический перезапуск службы веб-сервера (например, World Wide Web Publishing Service для IIS) перед началом рабочего дня. Это поможет «сбросить» накопленные ошибки и утечки памяти.

Подводя итог, можно сказать, что проблема не в физической нехватке лицензий, а в механизме их удержания при нестабильном интернет-соединении и особенностях файлового режима. Переход на клиент-серверный вариант (SQL) полностью решает эти проблемы, но если это невозможно, правильная настройка default.vrd и параметров веб-сервера позволит работать стабильно даже с 6 пользователями.

← На главную