При переходе на новые релизы платформы (начиная с 8.3.22.1709 и выше) многие администраторы и разработчики столкнулись с крайне неприятной проблемой. Система внезапно прерывает работу пользователя с сообщением «Параметр сеанса отсутствует или удален». Ошибка носит «плавающий» характер: она может возникать при формировании тяжелых отчетов, работе с электронным документооборотом (ЭДО) или просто в процессе активной навигации по интерфейсу. Давайте подробно разберем, почему это происходит и как стабилизировать работу системы.
Начиная с версии 8.3.22, архитектура платформы претерпела изменения в части работы с сеансовыми данными. Был внедрен механизм так называемого сеансового кэша, который физически располагается на сервере приложений в каталоге snccntx. Основная задача этого механизма — оптимизация потребления памяти и возможность быстрого восстановления контекста. Однако на практике выяснилось, что при определенных условиях (например, передача больших объемов данных через ПоместитьВоВременноеХранилище или работа с тяжелыми макетами moxel) сервер теряет связь с файлами этого кэша.
Ситуация осложняется тем, что сеанс пользователя остается активным в консоли администрирования, но попытка обращения к любому параметру сеанса вызывает исключение, так как сервер больше «не видит» закэшированные данные. Рассмотрим наиболее эффективные способы решения этой проблемы.
Это первое и самое действенное средство, которое помогает большинству пользователей. Важно понимать, что обычная очистка пользовательского кэша здесь не поможет, так как проблема локализована на стороне сервера приложений (кластера).
Выполним следующие шаги по очистке:
1C:Enterprise 8.3 Server Agent). Это критически важно, так как при запущенной службе файлы будут заблокированы.C:\Program Files\1cv8\srvinfo\reg_1541\.snccntx (очистка srvinfo). В этих папках хранятся контексты сеансов..pfl из каталога C:\ProgramData\1C\1cv8\. Эти файлы могут содержать устаревшие данные о подключениях.Важное замечание: некоторые администраторы отмечают, что удаление этих данных может временно очистить информацию в журнале регистрации, если он настроен некорректно, поэтому перед операцией убедитесь в наличии резервных копий критически важных логов.
Выясним, как настройки «засыпания» сеансов влияют на стабильность. Зачастую ошибка возникает в момент, когда платформа пытается перевести пассивный сеанс в спящий режим и некорректно сохраняет его параметры.
Для корректировки выполним следующие действия:
1200 секунд (20 минут).86400 секунд (24 часа).Эти манипуляции позволят избежать слишком частого перемещения данных сеанса между оперативной памятью и дисковым кэшем snccntx, что снижает вероятность возникновения ошибки десериализации.
Иногда штатных ресурсов одного рабочего процесса не хватает для обработки большого количества файлов кэша. Мы можем изменить настройки кластера для распределения нагрузки.
Разберем процесс настройки через штатную консоль:
256 или даже 512. Это позволит одному процессу rphost дольше удерживать контексты соединений без их сброса.0 (выключено) или зададим очень большой интервал. Частые перезапуски процессов также провоцируют потерю параметров сеанса.Если вы являетесь разработчиком и ошибка возникает в конкретном месте (например, при печати или загрузке файлов), проанализируйте использование временного хранилища. Ошибка часто проявляется, если в событии ПриСозданииНаСервере помещаются данные в хранилище, а затем форма долго инициализируется.
Рассмотрим пример правильного подхода к очистке и передаче данных:
// Вместо прямой передачи тяжелого макета через параметры сеанса
// используйте временное хранилище с привязкой к уникальному идентификатору формы
АдресХранилища = ПоместитьВоВременноеХранилище(ДанныеФайла, ЭтаФорма.УникальныйИдентификатор);
// Это гарантирует, что данные будут жить столько же, сколько живет сеанс формы
Также проверьте, не происходит ли обращение к ПолучитьИзХранилища после того, как сеанс был «уснувшим». Если вы получаете Неопределено, это верный признак того, что серверный кэш был сброшен или поврежден.
Не стоит забывать об окружении, в котором работает сервер 1С. Поскольку новые механизмы платформы активно используют дисковую подсистему для хранения кэша сеансов, любая блокировка файлов может стать фатальной.
Проанализируем следующие рекомендации:
srvinfo (и все вложенные каталоги) в список исключений антивирусного сканера. Попытка антивируса проверить обновляемый файл в папке snccntx приводит к тому, что 1С не может получить к нему доступ и выдает ошибку об отсутствии параметра.Проблема с отсутствующим параметром сеанса в релизах 8.3.22 — это комплексный баг, связанный с переходом на новую модель хранения контекста. Если вышеуказанные меры помогают лишь временно, рекомендуется рассмотреть возможность обновления платформы до более стабильных сборок, таких как 8.3.22.2239 или 8.3.23.1912, где фирма 1С внесла исправления в механизмы работы SeanceContextImpl.cpp. Помните, что регулярная очистка серверного кэша и правильная настройка таймаутов — залог стабильной работы высоконагруженных систем.