Мы все сталкивались с этой проблемой: запускаем конфигуратор 1С, начинаем работать, а он вдруг начинает потреблять гигабайты оперативной памяти, зависает или вовсе вылетает с ошибкой "Недостаточно памяти". Особенно остро эта ситуация проявляется в последних версиях платформы, таких как 8.3.27. Давайте вместе разберем, почему это происходит, и какие шаги мы можем предпринять для решения или хотя бы смягчения этой неприятной особенности.
Одной из самых частых причин аномального потребления памяти в конфигураторе является глобальный поиск. Мы выяснили, что эта проблема воспроизводится в различных версиях платформы, включая 8.3.24, 8.3.25 и 8.3.27. Рассмотрим подробнее, как это происходит.
Когда мы запускаем глобальный поиск, например, по строке "ном" с установленными всеми галками в большой конфигурации (например, 1С:ERP), мы наблюдаем странное поведение. Сначала поиск идет относительно нормально, и потребление памяти растет умеренно (например, до 2 ГБ). Однако, дойдя до определенного процента выполнения (часто около 38%), поиск зависает, конфигуратор перестает отвечать, и тут же начинается резкое, неконтролируемое потребление оперативной памяти. В ходе таких экспериментов конфигуратор мог "съесть" 51 ГБ, а в особо "удачных" случаях — до 158 ГБ оперативной памяти (включая файл подкачки), после чего благополучно падал.
Проанализируем ситуацию: причиной такого поведения, скорее всего, является утечка памяти где-то на уровне C++ кода самой платформы 1С. Конфигуратор, по всей видимости, неэффективно обрабатывает или хранит промежуточные результаты поиска, особенно когда количество найденных результатов очень велико. Несмотря на то, что сама конфигурация (.cf файл) может весить несколько гигабайт, и большая часть из них — бинарные данные, в которых нет текста для поиска, конфигуратор все равно пытается загрузить что-то в память в огромных объемах.
Мы можем предложить несколько путей решения или обхода этой проблемы:
ЧтениеТекста() и ЗаписьТекста(). Возможно, внутренний механизм глобального поиска мог бы использовать подобный подход.Еще одна выявленная проблема связана с неэффективной работой 1С с большими объемами данных внутри объектов типа ТабличныйДокумент (макеты). Мы видим, что если в макете хранится очень большая строка, например, данные в формате Base64, это может привести к зависаниям, даже если общий объем текста составляет всего 1 МБ.
Если нам необходимо хранить данные в формате Base64, например, изображения или другие бинарные данные, лучше не помещать их в строки табличного макета. Вместо этого, мы рекомендуем выделять для таких данных отдельный макет простого текста или использовать специализированные механизмы хранения двоичных данных, которые более оптимизированы для этой цели.
Мы также заметили, что конфигуратор 1С 8.3.27 (и более ранние версии) не освобождает память после выполнения тяжелых операций, таких как загрузка изменений, обновление конфигурации базы данных или сравнение конфигураций. Это приводит к постепенному накоплению потребляемой памяти, и в конечном итоге к ошибке "Недостаточно памяти", если не перезапускать конфигуратор между такими операциями.
Кроме того, при проверке конфигурации в расширенном режиме, особенно после добавления ускорения проверки модулей, мы можем столкнуться с ситуацией, когда вся операционная система (включая Chrome, Telegram и другие приложения) подвисает на 10 секунд. Это может быть связано с тем, что 1С активно использует все доступные ресурсы для проверки, что приводит к временной нехватке ресурсов для других приложений.
В качестве временного решения, мы настоятельно рекомендуем регулярно перезапускать конфигуратор после каждой крупной операции (сравнение, объединение, проверка конфигурации), чтобы очистить занятую память.
Помимо специфических проблем, рассмотрим общие подходы к оптимизации работы с памятью в 1С:
bcdedit. Например:
bcdedit /set increaseuserva 3072
Сравнить выборочно с объектом хранилища. Это значительно быстрее полного сравнения конфигураций, так как сравниваются только свойства указанного объекта.технологический журнал 1С и другие инструменты мониторинга. Они помогут нам точно определить, какие операции вызывают наибольшее потребление ресурсов.Важно отметить, что разработчики 1С постоянно работают над оптимизацией платформы. В версии 8.3.27 были реализованы следующие улучшения:
.dt/.cf файлов, обновления базы и очистки кэша. Тесты на 1С:ERP показали ускорение в 3,5 раза.ПриЗаписи(Отказ, Замещение).Дата акселератор теперь может хранить данные на диске, что решает проблемы с потерей данных после сбоев и позволяет хранить объем данных, превышающий объем оперативной памяти.Несмотря на официальные оптимизации, мы видим, что проблемы с памятью в конфигураторе 1С 8.3.27 продолжают проявляться. Форумы подтверждают, что конфигуратор по-прежнему "безобразно обращается с памятью", не освобождая ее после тяжелых операций, что может приводить к падениям. Проблема с "подвисанием" операционной системы на 10 секунд при проверке конфигурации (расширенный режим) также подтверждается.
Интересное наблюдение: версия 8.3.27.1644 оказалась "провальной" из-за критических проблем с производительностью и надежностью, включая крайне медленное сохранение и обновление конфигураций. Мы рекомендуем использовать версию 8.3.27.1606 как более стабильную, если есть такая возможность.
В заключение, мы видим, что проблема потребления памяти конфигуратором 1С является комплексной. Несмотря на усилия разработчиков, нам, как пользователям и разработчикам, часто приходится применять различные "костыли и велосипеды", чтобы обеспечить стабильную работу. Мы надеемся, что представленные рекомендации помогут вам сделать вашу работу с конфигуратором 1С более комфортной и эффективной.
← К списку