Многие системные администраторы и программисты сталкиваются с парадоксальной ситуацией: на сервере доступно огромное количество физической оперативной памяти (например, свободно 10 или даже 50 Гб), но при запуске базы или формировании отчета система выдает ошибку: «Ошибка выполнения запроса по причине: Недостаточно свободной памяти на сервере 1С:Предприятия». Давайте проанализируем эту ситуацию вместе и разберем по шагам, почему так происходит и как с этим бороться.
Первое, на что необходимо обратить внимание — разрядность вашего сервера 1С. Если вы используете 32-разрядный сервер 1С, то для каждого рабочего процесса rphost операционная система выделяет жесткий лимит адресного пространства. Обычно этот предел составляет ровно 2 Гб.
Здесь в игру вступает фрагментация адресного пространства. Процесс 1С постоянно выделяет и освобождает блоки памяти разного размера. Со временем память внутри выделенных 2 Гб превращается в «решето». Если системе потребуется выделить большой сплошной блок памяти (например, для построения объемной временной таблицы или выполнения тяжелого запроса), она не сможет этого сделать, так как нет непрерывного куска нужного размера. При этом в диспетчере задач процесс может потреблять всего 1,2–1,5 Гб, а физической памяти на сервере может быть еще очень много.
Если мы пока не можем отказаться от 32-битной архитектуры, давайте рассмотрим способы минимизации этих сбоев.
rphost без обрыва соединения.rphost, чтобы распределить пользователей и нагрузку по памяти между ними.Главным и самым эффективным способом навсегда забыть о проблеме адресного пространства является апгрейд серверной части 1С до 64-разрядной версии (x86-64). Посмотрим, что нам это даст:
В 64-битной версии ограничения в 2 Гб на процесс не существует. Процесс rphost может беспрепятственно утилизировать всю доступную физическую память сервера. Однако архитектура кластера здесь меняется на противоположную: вместо пложения множества процессов, рекомендуется оставить всего один рабочий процесс rphost на весь сервер (или по одному на информационную базу), чтобы не тратить ресурсы ЦП на синхронизацию кэша между ними. Обратите внимание, что для использования 64-битного сервера потребуется приобретение соответствующей лицензии.
Давайте проанализируем дополнительные аспекты, которые могут вызывать утечки памяти даже при правильных настройках кластера:
excp, excpcntx, а также анализ длительных запросов).shared_buffers) и сортировки (work_mem). Если эти параметры завышены, база данных может забрать всю оперативную память ОС, и серверу 1С банально не хватит ресурсов для выделения памяти новым сеансам.Подводя итог: если вы столкнулись с ошибкой нехватки памяти, первым делом настройте корректные лимиты перезапуска процесса rphost. Параллельно с этим проведите аудит кода на наличие тяжелых запросов и циклических ссылок, а при возможности — запланируйте переход на 64-битную платформу, что снимет проблему фрагментации памяти раз и навсегда.