Память для 1С не хватает: где её взять на сервере, в СУБД и на рабочем месте

· 9 мин

Содержание

Пользователи жалуются, что отчёт за год «подвисает», а на сервере в диспетчере задач rphost.exe занимает 14 ГБ из 16. Первая мысль: докупить планку памяти. Иногда это правда помогает, но чаще память «съедает» одна конкретная причина, и её видно на замере. Сначала выясняем, кто занял память, потом решаем, где её добавлять: на сервере 1С, в СУБД или на рабочем месте.

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

Сначала замер: кто на самом деле занимает память

Не покупайте ОЗУ вслепую. Откройте на сервере диспетчер задач (или perfmon) и посмотрите потребление по процессам.

ПроцессЧто этоЧто означает рост
ragentАгент сервераОбычно небольшой, рост — редкость
rmngrМенеджер кластераРастёт с числом сеансов и блокировок
rphostРабочий процессОсновной потребитель, в нём исполняется серверный код
postgres / sqlservrСУБДКэш данных, занимает всё, что ей разрешено
1cv8 / 1cv8cКлиентПамять рабочего места пользователя

Что смотреть:

  • 📈 Растёт ли rphost без остановки в течение дня. Плавный рост до вечера и падение после перезапуска — признак утечки или тяжёлых сеансов.
  • 🧮 Сколько памяти у СУБД. Если postgres или sqlservr занимают почти всё ОЗУ — это нормально, так задумано. Тревожиться стоит, когда системе не хватает памяти и начинается подкачка.
  • 💾 Файл подкачки. Если диск загружен под 100%, а в rphost памяти много, вы уже упёрлись в ОЗУ.

Чтобы связать процесс с пользователем, откройте консоль администрирования серверов 1С, найдите рабочий процесс и сеансы. Там видно, какой сеанс и какая база потребляют память. Часто виноват один пользователь с огромным отчётом, а не нехватка ОЗУ.

Для администрирования из командной строки есть утилита rac. Список команд: rac help. Сеансы кластера: rac session list, но номер кластера и адрес сервера подставляйте свои.

Как понять, что памяти действительно мало

Один пик в 14 ГБ ещё ни о чём не говорит. Смотрите на картину за несколько рабочих дней:

  • 📊 Включите в perfmon счётчики доступной памяти и обращений к файлу подкачки и оставьте запись на неделю.
  • 🕘 Сопоставьте пики со временем закрытия периода, формированием регламентированной отчётности и ночными обменами. Если пик один раз в месяц, под него проще подобрать окно и ограничение, чем покупать планки.
  • 👥 Сравните потребление в часы пик и ночью: разница показывает, сколько занимают сеансы пользователей, а сколько фоновые задания.

Если свободной памяти остаётся не меньше 10-15% даже в пик, а подкачка почти не используется, дело не в объёме ОЗУ. Тогда ищите узкое место в диске, процессоре или запросах.

Лимиты рабочих процессов на сервере 1С

Сервер 1С не берёт всю память по умолчанию, но и не бережёт её. Лимиты задаются в консоли администрирования: откройте кластер, затем свойства рабочего сервера и свойства самого кластера.

Параметры, которые отвечают за память:

  • 🔹 Допустимый объём памяти рабочих процессов. Если процесс превысил порог, кластер перестаёт отдавать ему новые соединения и со временем перезапускает.
  • 🔹 Интервал превышения допустимого объёма. Сколько процесс может держаться выше порога, прежде чем его завершат.
  • 🔹 Безопасный расход памяти за один вызов. Серверный вызов, который съел больше, будет прерван. Так защищаются от «разгулявшегося» отчёта.
  • 🔹 Число рабочих процессов на сервере. Больше процессов — меньше памяти на каждый и устойчивее к сбою одного, но выше накладные расходы.

Как подбирать порог. Возьмите объём ОЗУ, вычтите то, что нужно ОС и СУБД (если они на одной машине), и разделите остаток на число рабочих процессов с запасом 15-20%. Например: 32 ГБ, из них 12 ГБ СУБД и 3 ГБ система. Остаётся 17 ГБ, процессов 4, значит на каждый примерно по 3,5 ГБ с запасом.

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

Если ставите сервер 1С впервые

Используйте 64-разрядную версию серверной части. 32-разрядный рабочий процесс ограничен по адресному пространству, и никакая добавленная память ему не поможет. Это самая частая причина, когда «поставили 64 ГБ, а rphost падает на 2-3 ГБ».

Настройка СУБД: кэш данных и рабочая память

Большая часть памяти в схеме «1С + СУБД» принадлежит базе данных. Здесь два типичных случая.

PostgreSQL

Основные параметры лежат в postgresql.conf:

shared_buffers = 8GB
effective_cache_size = 24GB
work_mem = 32MB
maintenance_work_mem = 1GB

Это пример для сервера с 32 ГБ ОЗУ, где СУБД стоит отдельно. Ориентиры:

  • shared_buffers — порядка четверти ОЗУ;
  • effective_cache_size — подсказка планировщику о размере кэша ОС и самой СУБД, 50-75% ОЗУ;
  • work_mem — память под сортировку и соединения на операцию. Не завышайте: умножается на число одновременных операций и сеансов;
  • maintenance_work_mem — память под обслуживание, индексы и очистку.

Для 1С рекомендуется специальная сборка PostgreSQL, поставляемая вместе с продуктом; для неё параметры те же.

После правки конфига shared_buffers вступает в силу только при перезапуске службы СУБД. Остановка оборвёт все подключения 1С.

MS SQL Server

Ключевой параметр — максимальный объём памяти сервера (в свойствах сервера на странице «Память», max server memory). Если оставить значение по умолчанию, SQL Server заберёт почти всё и оставит системе крохи. Задайте его так, чтобы операционной системе и серверу 1С (если они на той же машине) осталось запас в несколько гигабайт.

Если СУБД и сервер 1С на одной машине, делите память явно: что-то одному, остальное другому. Иначе они будут конкурировать, и выигравший оставит систему без запаса.

Клиент 1С: когда не хватает памяти на рабочем месте

На рабочем месте проблемы другие. Типичные симптомы: ошибка нехватки памяти при открытии большого отчёта, зависание при выгрузке в Excel.

Что проверить:

  1. Разрядность клиента. 32-разрядный клиент ограничен по адресному пространству. Для тяжёлых отчётов и больших выгрузок ставьте 64-разрядный клиент, если платформа и внешние компоненты это поддерживают.
  2. Объём ОЗУ рабочего места. Для тяжёлой работы с большими отчётами разумно иметь не менее 8 ГБ.
  3. Лишние фоновые программы и десятки открытых вкладок браузера на тонком клиенте.
  4. Файловая база на слабой машине. В файловом режиме клиент сам делает работу сервера. Тяжёлые базы стоит переводить на клиент-серверный вариант.

Кэш клиента

Клиент хранит локальный кэш: служебные данные интерфейса, список баз, сведения о конфигурации. Разросшийся или битый кэш иногда вызывает странные тормоза и ошибки. Его чистят закрытием всех сеансов и удалением содержимого папок кэша в профиле пользователя (подпапка 1C\1cv8 в каталогах Local и Roaming профиля). Для запуска с очисткой есть параметр командной строки /ClearCache.

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

Память у клиента этим не прибавляется, но если приложение «пухнет» из-за битого кэша, проблему решит именно очистка.

Обслуживание базы: чем меньше мусора, тем меньше памяти нужно

Иногда ОЗУ не хватает не из-за малого объёма, а из-за раздутой базы.

  • 🧹 Свёртка и удаление старых данных, если регламент позволяет: меньше записей — меньше нагрузки на кэш.
  • 🗂️ Регламентные операции СУБД. Обновление статистики и перестроение индексов поддерживают быстрые планы запросов. Плохой план запроса может прочитать в память всю таблицу.
  • 📦 Журналы регистрации и техжурнал. Если включён подробный технологический журнал, он нагружает диск и процессор. Включайте на время диагностики.
  • 🔁 Блокировки и «зависшие» сеансы. Забытые сеансы держат память. Завершайте их через консоль администрирования.

Простой пример. База на 200 ГБ, в ней регистр накопления на 80 ГБ с данными за десять лет. Отчёт за год читает кусок таблицы. Если запрос написан плохо и условие по периоду не использует индекс, СУБД тащит в кэш гигабайты лишнего. Добавлять оперативную память можно сколько угодно, но правильнее поправить запрос или индексы.

Перед покупкой оперативной памяти
Выполнено: 0 / 5

Аппаратный апгрейд и виртуальные машины

Если замер показал, что памяти реально не хватает, добавляйте физически.

Ориентиры по ОЗУ (для клиент-серверного варианта, очень приблизительно):

СценарийСервер 1ССУБД
До 10 пользователей8-16 ГБ вместе с СУБД на одной машине
10-50 пользователей16-32 ГБ16-32 ГБ
50-100 пользователей и тяжёлые отчёты32-64 ГБ32-128 ГБ

Это ориентиры, а не норма: реальная потребность зависит от конфигурации, числа баз и характера работы.

Что учесть:

  • 🖥️ Виртуализация. В гипервизоре под ВМ задайте фиксированный объём ОЗУ или резервирование. Динамическая память или «раздувание» (ballooning) отбирает ОЗУ у гостя в самый неподходящий момент.
  • 🧱 Планки памяти. Ставьте в соответствии с картой слотов материнской платы; одинаковые модули в парах дают максимальную пропускную способность.
  • ⚡ Диски. Если СУБД читает с медленного диска, больше памяти под кэш помогает, но SSD решает проблему радикальнее.
  • 🔌 Лицензии и редакция ОС. Некоторые редакции Windows Server и SQL Server ограничивают поддерживаемый объём ОЗУ или число ядер, проверьте ограничения вашей редакции до покупки памяти.

Если ресурсов на одной машине не хватает, разнесите роли: сервер 1С отдельно, СУБД отдельно. Так проще планировать память и обслуживать каждую часть.

Если не помогло

Допустим, лимиты подняты, ОЗУ добавлена, а rphost по-прежнему раздувается. Тогда ищем причину в коде.

Диагностика: выберите симптом

Частые вопросы

Сколько ОЗУ нужно серверу 1С на одного пользователя?
Точной цифры нет, всё зависит от конфигурации и нагрузки. Планируйте от замера: посмотрите, сколько занимает сеанс при типичной работе, и умножьте на число пользователей с запасом.
Можно ли ограничить память, которую берёт СУБД?
Да. В MS SQL это параметр максимального объёма памяти сервера, в PostgreSQL — shared_buffers и связанные настройки.
Нужно ли перезапускать сервер после смены лимитов?
Часть изменений применяется при перезапуске рабочих процессов, часть — при перезапуске службы СУБД. Планируйте это на нерабочее время, сеансы оборвутся.
Поможет ли файл подкачки вместо реальной ОЗУ?
Нет. Подкачка спасает от аварийного завершения, но резко замедляет работу: диск в сотни раз медленнее памяти.
Почему 1С не использует всю доступную память?
32-разрядные процессы упираются в потолок адресного пространства, а лимиты кластера не дают рабочим процессам расти бесконечно. Проверьте разрядность и настройки кластера.