27 янв. 2019 г.

Роль в памяти

На днях получилось решить интересный кейс по оптимизации. Забегая вперед, скажу, что никогда бы не подумал, что выявленная причина может влиять на потребляемые ресурсы. Более того, полагаю, что и сам мог когда то так косячить с настройками.

Но обо всем по порядку. Больной - конфигурация ERP 2.4, симптомы - конфигуратор и процессы rphost потребляют подозрительно много памяти. При этом оказалось, что проблема от пользовательских данных особо не зависит.
Ок, развернул тестовый стенд на виртуалке и начал изучать пациента.


В конфигураторе рост потребления памяти начинается при открытии любой формы.



Для rphost при первом клиентском подключении.



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



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

Первый анализ добавленных ролей явных проблем не выявил - роль выдана на конкретный объект конфигурации, ничего лишнего. Поэтому на следующем этапе решил посмотреть как выглядят добавленные роли после выгрузки конфигурации в файлы. Оказалось, выгруженные роли занимают более 50% от объема файлов всей конфигурации, а среди файлов ролей есть 237 файлов по 20 Мб, общим объемом 4,42 Гб.





После изучения первого попавшегося файла все встало на свои места и мне удалось повторить порядок действий и создать роль, которая при выгрузке имеет такой же большой объем. Как оказалось, у всех ролей при создании включена настройка "Устанавливать права для реквизитов и табличных частей по умолчанию", и у проблемной роли права на реквизиты прочих объектов не установлены. Что бы сделать такую роль, необходимо после создания выполнить "Действия" - "Снять все права", оставив все остальные настройки без изменения, после чего продолжить настройку нужных прав.




В итоге у такой роли помимо настроек объекта прав для каждого реквизита всех остальных объектов конфигурации в XML-файле установлено значение false, что в итоге приводит к подобному объему файла.


Соответственно, при открытии формы в конфигураторе, либо при первом подключении все эти объемы подтягиваются в процессы. Чтобы исправить роль, необходимо выключить и включить настройку "Устанавливать права для реквизитов и табличных частей по умолчанию". После изменения всех проблемных ролей потребление памяти значительно сократилось.



Статья так же опубликована на Инфостарте.

3 комментария:

  1. Спасибо, интересный случай.

    ОтветитьУдалить
  2. Спасибо.
    Как раз хотел снять эту галочку для части ролей :)

    ОтветитьУдалить
  3. Интересно, а почему так, проблема в самой платформе?

    ОтветитьУдалить