Ситуация, когда при наличии свободных лицензий шестой пользователь не может войти в систему, а работающие сеансы внезапно «зависают», является типичной для файловых баз 1С:Предприятие, опубликованных через веб-сервер (Apache или IIS). В данной статье мы подробно разберем, почему возникают такие блокировки, как работает механизм раздачи лицензий веб-сервером и какие настройки помогут стабилизировать работу системы «1С:Розница» или любой другой конфигурации на платформе 8.3.
Когда пользователи работают через интернет (используя тонкий клиент или веб-клиент), лицензии выдает не клиентское приложение, а сам веб-сервер. В файловом варианте работы существует критическая проблема «фантомных» или «зависших» сеансов. Проанализируем ситуацию: если пользователь некорректно закрыл программу (просто закрыл ноутбук, произошел обрыв связи или процесс был завершен принудительно), веб-сервер не узнает об этом мгновенно. Он продолжает удерживать лицензию в течение установленного таймаута, который по умолчанию может составлять 20 минут и более.
Рассмотрим, как это влияет на доступность: если у вас куплено 6 лицензий, а в системе активно работают 5 человек, но один из них недавно переподключился из-за сбоя сети, веб-сервер может считать, что занято 6 лицензий (5 активных + 1 «повисшая»). В итоге шестой реальный пользователь получит отказ в доступе. Помогает в этом случае только перезагрузка службы веб-сервера или всего сервера целиком, что и наблюдалось в исходной ситуации.
Для управления временем жизни сеансов и оптимизации пула соединений нам необходимо отредактировать файл 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="C:\Base1C";">
<ws>
<point name="Common"
alias="common.1cws"
sessionMaxAge="900"
poolSize="10"
poolTimeout="60"/>
</ws>
</point>
Разберем подробнее, за что отвечают эти параметры:
1Cv8.1cd приведет к блокировкам.Выясним причину, почему база «отвисает» через длительное время (например, через 40 минут). Файловая база данных крайне чувствительна к количеству одновременных обращений. В отличие от клиент-серверного варианта (SQL), где СУБД управляет очередями и транзакциями на уровне строк, файловая база часто блокирует таблицы целиком или даже весь файл при выполнении тяжелых операций.
Если один пользователь запустил сложный отчет (например, по остаткам в «1С:Розница») или выполняется фоновое РегламентноеЗадание, веб-сервер создает очередь запросов. Все остальные пользователи будут видеть «песочные часы» или белое окно до тех пор, пока первая операция не завершится. Важно помнить: в файловой базе через веб-сервер регламентные задания могут запускаться в отдельном скрытом сеансе, который также потребляет одну лицензию из ваших шести доступных.
Версия платформы 8.3.11 является достаточно старой. В ней зафиксированы проблемы с утечкой памяти при длительной работе веб-сервисов. Проанализируем состояние сервера: если оперативная память занята процессами веб-сервера (w3wp.exe для IIS или httpd.exe для Apache) и не освобождается, это приводит к критическому замедлению работы.
Посмотрим на пример решения через очистку кэша. Часто зависания лечатся удалением временных файлов в папках профиля пользователя, под которым запущена служба веб-сервера:
%AppData%\1C\1cv8%LocalAppData%\1C\1cv8Рекомендуется настроить скрипт автоматической очистки этих папок при перезагрузке сервера.
Если вы используете IIS (Internet Information Services), основной причиной зависаний может быть «Пул приложений» (Application Pool). По умолчанию он может уходить в спящий режим при отсутствии активности или иметь некорректные настройки переработки (recycling).
Рассмотрим шаги по оптимизации IIS:
AlwaysRunning.Если используется Apache, обратите внимание на параметр KeepAlive. Если он включен (On), сервер держит TCP-соединение открытым для каждого запроса. При большом количестве мелких запросов от тонкого клиента это может забить лимит соединений веб-сервера. Попробуйте установить KeepAlive Off или уменьшить KeepAliveTimeout до 2-5 секунд.
Проанализируем ситуацию с блокировками на уровне файловой системы. Поскольку веб-сервер постоянно читает и записывает данные в файл 1Cv8.1cd, любое стороннее вмешательство может вызвать deadlock (взаимную блокировку). Если в момент записи антивирус решит проверить файл базы на наличие угроз, 1С не сможет получить к нему доступ и «зависнет».
Необходимо добавить в исключения антивируса:
*.1cd, *.1cl, *.cdn, *.log.Также обратите внимание на работу в копии базы. Если вы запускаете копию на том же сервере, она создает конкурентную нагрузку на дисковую подсистему. Если диск (особенно если это HDD, а не SSD) не справляется с очередью чтения/записи, «фризы» будут ощущать все пользователи основной базы.
Чтобы минимизировать количество зависаний, внедрим следующие правила для пользователей и администраторов:
Файл - Завершить работу, а не просто закрытием вкладки браузера или окна терминала. Это гарантирует немедленное освобождение лицензии на стороне веб-сервера.World Wide Web Publishing Service для IIS) перед началом рабочего дня. Это поможет «сбросить» накопленные ошибки и утечки памяти.Подводя итог, можно сказать, что проблема не в физической нехватке лицензий, а в механизме их удержания при нестабильном интернет-соединении и особенностях файлового режима. Переход на клиент-серверный вариант (SQL) полностью решает эти проблемы, но если это невозможно, правильная настройка default.vrd и параметров веб-сервера позволит работать стабильно даже с 6 пользователями.