В процессе эксплуатации тяжелых современных конфигураций на платформе 1С:Предприятие 8.3 (таких как «Управление торговлей 11», «Комплексная автоматизация 2» или «ERP») администраторы и пользователи часто сталкиваются с крайне неприятным симптомом. Внезапно у одного или сразу у нескольких пользователей в интерфейсе пропадают все основные разделы и подсистемы. Вместо привычного полноценного меню отображается пустой рабочий стол либо только раздел с отчетами. Очистка локального кэша и даже пересоздание учетных записей пользователей помогают лишь на очень короткое время, после чего проблема возвращается.
В этой статье мы подробно разберем, почему возникает эта аномалия, проанализируем внутренние механизмы платформы 1С, приводящие к сбою, и рассмотрим эффективные методы решения этой проблемы в различных сценариях.
Причиной исчезновения разделов интерфейса является аварийное завершение процесса построения командного интерфейса на стороне сервера. Если заглянуть в журнал регистрации или дождаться появления системного окна ошибки у пользователя, мы увидим следующий текст:
{ОбщийМодуль.СтандартныеПодсистемыКлиент.Модуль(1693)}: Ошибка при вызове метода контекста (ОбновитьИнтерфейс)
по причине: Превышен максимальный расход памяти сервера за один вызов
Давайте разберем по шагам, что происходит в этот момент внутри системы:
ОбновитьИнтерфейс().rphost.Многие администраторы замечают, что если удалить пользователя и создать его заново, интерфейс временно восстанавливается. Дело в том, что у нового пользователя полностью отсутствуют сохраненные персональные настройки внешнего вида, избранного и истории выбора (все эти данные хранятся в системной таблице _SystemSettings).
Для новой учетной записи сервер строит максимально простую, базовую схему интерфейса. На этот облегченный вызов серверу хватает памяти, и запуск проходит успешно. Однако через несколько дней работы пользователь настраивает под себя панели, открывает различные формы, система накапливает историю, и объем обрабатываемых при старте данных увеличивается. Вызов ОбновитьИнтерфейс() снова упирается в лимит памяти, и разделы исчезают вновь.
Параметр контроля «Безопасный расход памяти за один вызов» — это функционал исключительно клиент-серверного варианта работы (кластера серверов 1С). В файловом режиме работы сервер приложений 1С физически отсутствует, лимиты кластера не накладываются, и локальный процесс может использовать весь объем доступной оперативной памяти персонального компьютера для компоновки интерфейса. Именно поэтому выгрузка базы в формат .dt и запуск в файловом варианте не воспроизводят данную ошибку.
Первое побуждение системного администратора при столкновении с лимитами памяти — открыть консоль администрирования кластера серверов 1С, зайти в свойства рабочего сервера и изменить параметр «Безопасный расход памяти за один вызов» со значения по умолчанию на большее (или установить -1 — без ограничений).
Внимание! Начиная с версии платформы 8.3.12, изменение любых параметров сервера 1С, управляющих распределением ресурсов (включая лимиты памяти, количество баз на процесс и т.д.), разрешено только при наличии у организации серверных лицензий уровня КОРП.
Если ваша база работает на лицензии уровня ПРОФ, любая попытка изменить этот параметр приведет к полной блокировке работы пользователей. Система начнет выдавать ошибку:
Использование этой функции возможно только для лицензий уровня КОРП.
Операция не может быть выполнена с текущим составом лицензий.
Для систем на лицензиях ПРОФ этот параметр обязан оставаться в значении 0 (что означает автоматический расчет лимита платформой — обычно это 10% от доступной процессу памяти).
---
Поскольку просто отключить лимит в консоли серверов ПРОФ нельзя, рассмотрим комплекс практических мер, которые позволяют устранить ошибку и вернуть пользователям полноценный интерфейс.
Чтобы оперативно вернуть интерфейс пользователю, не нужно удалять его из базы. Достаточно очистить его сохраненные настройки, которые перегружают память при запуске. Разберем по шагам, как это сделать:
После этой процедуры первый запуск программы у пользователя пройдет успешно, а интерфейс вернется к стандартному виду.
Для серверов с лицензиями ПРОФ лимит безопасного расхода памяти за один вызов рассчитывается автоматически как процент от общего объема доступной серверу оперативной памяти.
Если на сервере приложений установлено, например, 16 Гб RAM, то лимит на один вызов будет критически мал. Увеличение физической оперативной памяти сервера (например, до 32 Гб или 64 Гб) автоматически пропорционально увеличит допустимый лимит на один вызов для процесса rphost без необходимости изменения настроек в консоли кластера.
Очень часто резкое потребление памяти при вызове метода ОбновитьИнтерфейс() провоцируют неоптимальные расширения конфигурации. Если в расширение заимствовано огромное количество ролей, подсистем или сложных управляемых форм, серверу приходится выполнять колоссальную работу по их объединению с основной конфигурацией при старте сеанса.
Проанализируем ситуацию:
Как отмечают практикующие специалисты, данная проблема часто обостряется после проведения так называемых «динамических обновлений» (обновлений конфигурации без выгона пользователей). В кэше сервера приложений возникает несоответствие метаданных, из-за чего построение интерфейса начинает потреблять в разы больше ресурсов.
Выполним очистку и исправление метаданных по следующей схеме:
snccg и другие временные каталоги в каталоге службы сервера 1С)./C StartUpdate.Если ваша организация официально использует серверные лицензии КОРП, вы можете напрямую управлять лимитами расхода памяти рабочих процессов, чтобы избежать прерывания вызова ОбновитьИнтерфейс().
Рассмотрим порядок настройки в консоли администрирования:
0.2147483648 или 4294967296) в зависимости от ресурсов вашего сервера, либо установите значение -1 для полного отключения этого ограничения.В некоторых релизах платформы (в частности, в ветках 8.3.15, 8.3.18 и ранних сборках 8.3.24) существовали зарегистрированные ошибки, связанные с утечкой памяти и неэффективным использованием ресурсов при формировании интерфейса «Такси» и обработке функциональных опций.
Рекомендуется обновить платформу 1С до актуального стабильного релиза. В новых версиях разработчики платформы существенно оптимизировали алгоритмы метода ОбновитьИнтерфейс(), снизив пиковое потребление оперативной памяти сервером при запуске клиентских приложений.