Серверу 1С не хватает ОЗУ и места на диске: что докупить, а что настроить

· 11 мин

Содержание

Увеличить память на сервере 1С можно тремя путями: докупить и поставить модули ОЗУ (или поднять лимит виртуальной машины), перевести сервер 1С на 64-битную версию и ограничить аппетиты рабочих процессов и СУБД в настройках, либо вынести СУБД на отдельную машину. Первый путь самый надёжный, второй бесплатный, третий нужен, когда в один сервер всё уже не помещается.

Начинать стоит с диагностики. Часто серверу хватает ОЗУ, но её съедает MS SQL без ограничения или «распухший» процесс rphost. Тогда новые планки дадут неделю передышки, а потом всё повторится. С дисковым пространством то же самое: сначала найдите, что растёт, потом расширяйте том.

Как понять, что серверу 1С не хватает памяти

Типичные симптомы со стороны пользователей:

  • 🐢 база «думает» на простых операциях, хотя вчера работала быстро;
  • 💥 ошибки Недостаточно памяти или Out of memory при формировании отчётов и закрытии месяца;
  • 🔌 пользователей выбрасывает с сообщением о разрыве соединения с сервером;
  • 📉 к вечеру всё медленнее, после перезапуска службы снова нормально.

Подтвердить догадку можно за 10 минут, без сторонних программ.

Диспетчер задач и монитор ресурсов Windows

Откройте Диспетчер задач → Производительность → Память. Смотрите на три числа: «Используется», «Доступно» и «Выделено». Если доступной памяти стабильно меньше 10% от объёма, а «Выделено» близко к пределу или превышает физическую память, сервер живёт на файле подкачки.

На вкладке «Подробности» отсортируйте процессы по столбцу памяти. На сервере 1С обычно в лидерах:

ПроцессЧто этоСколько памяти — норма
sqlservr.exeMS SQL ServerСтолько, сколько ему разрешили. Без лимита забирает почти всё
postgres.exePostgreSQLМного процессов по 20–200 МБ плюс общий буфер
rphost.exeРабочий процесс 1СОт сотен мегабайт до нескольких гигабайт под нагрузкой
rmngr.exeМенеджер кластераОбычно сотни мегабайт
ragent.exeАгент сервераДесятки мегабайт

Для истории нагрузки подойдёт системный монитор perfmon. Добавьте счётчики Memory\Available MBytes и Memory\Pages/sec, соберите данные за рабочий день. Высокий Pages/sec при малом остатке свободной памяти — прямой признак нехватки ОЗУ.

Консоль администрирования серверов 1С

В консоли откройте Кластеры → <ваш кластер> → Рабочие процессы. В списке есть колонка с занятой памятью по каждому rphost. Если один процесс растёт весь день и не отдаёт память, это похоже на утечку или тяжёлый сеанс. Посмотрите, какие сеансы на нём висят, в ветке «Сеансы».

Кто съедает память на вашем сервере?

Увеличиваем оперативную память на сервере 1С: железо и виртуалка

Физический сервер

Прежде чем заказывать модули, выясните четыре вещи:

  1. Тип памяти. Серверные платы обычно требуют регистровую память с ECC (RDIMM). Обычные «настольные» модули без регистра в такую плату не встанут или не запустятся.
  2. Свободные слоты и максимум платы. Смотрите паспорт платы или утилиту управления сервером (iLO, iDRAC, IPMI). Там же видно, какие слоты заняты.
  3. Каналы памяти. Модули ставят парами или группами по числу каналов процессора. Если воткнуть одну планку в шестиканальную систему, объём вырастет, а скорость доступа к памяти упадёт.
  4. Одинаковость. Лучше брать модули той же частоты, ранговости и объёма, что уже стоят. Разнородная память работает на частоте самого медленного модуля.

Порядок работ:

  1. Согласуйте окно простоя и предупредите пользователей: все сеансы оборвутся.
  2. Завершите работу пользователей, остановите службу «Агент сервера 1С:Предприятия 8.3» и службу СУБД.
  3. Выключите сервер штатно, обесточьте, снимите статику.
  4. Установите модули по схеме из паспорта платы.
  5. Включите сервер и проверьте в BIOS или консоли управления, что виден весь объём.
  6. В Windows проверьте объём в Диспетчер задач → Производительность → Память.

Ориентировочно модуль серверной DDR4 ECC на 32 ГБ стоит порядка 6–12 тыс. руб., DDR5 дороже. Цены сильно гуляют, поэтому сверяйтесь с поставщиком под конкретную модель сервера.

Виртуальная машина

На Hyper-V, VMware или в облаке память добавляют в настройках ВМ. Как правило, нужна остановка гостевой системы. Горячее добавление памяти бывает, но не во всех гипервизорах и гостевых ОС.

Для сервера 1С и СУБД ставьте статическую память. Динамическая память и баллонинг приводят к тому, что СУБД рассчитывает на объём, которого в момент пика у неё нет. Резервирование памяти за ВМ на уровне гипервизора тоже не помешает.

Ограничения ОС

32-битная Windows видит максимум 4 ГБ ОЗУ, и добавлять память в такую систему бессмысленно. Современные Windows Server 2016 и новее ограничений, в которые упрётся малый или средний сервер 1С, не имеют.

Как увеличить доступную память для 1С без покупки модулей

Переход на 64-битный сервер 1С

Это самый частый «бесплатный» приём. Если на сервере стоит 32-битный сервер 1С, каждый rphost может адресовать лишь несколько гигабайт, сколько бы ОЗУ ни было в машине. На 64 ГБ сервера процесс всё равно упадёт с нехваткой памяти.

Проверить разрядность просто: в диспетчере задач у 32-битных процессов в имени или в столбце «Платформа» указано 32 бита. Путь установки тоже подсказывает: 32-битная платформа лежит в C:\Program Files (x86)\1cv8.

Переход: установите 64-битный сервер той же версии платформы, зарегистрируйте его службой и перенесите настройки кластера. Для 64-битного сервера нужна соответствующая серверная лицензия, проверьте её до переключения.

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

Параметры памяти задаются в двух местах консоли администрирования.

Свойства кластера (правой кнопкой по кластеру → «Свойства»):

  • Интервал перезапуска — через сколько секунд рабочий процесс плавно перезапускается. Например, 86400 — раз в сутки. Сеансы при этом переводятся на новый процесс.
  • Допустимый объём памяти и Интервал превышения допустимого объёма памяти — если процесс держит больше заданного объёма дольше указанного интервала, кластер перезапускает его.
  • Принудительно завершать проблемные процессы — флажок, без которого лимиты не дадут эффекта.

Свойства рабочего сервера (Рабочие серверы → <сервер> → Свойства):

  • Максимальный объём памяти рабочих процессов — общий потолок для всех rphost на этой машине;
  • Безопасный расход памяти за один вызов — защита от одного «прожорливого» серверного вызова: его обрывают с ошибкой, а остальные пользователи продолжают работать;
  • Количество ИБ на процесс — при значении 1 каждая база работает в своём процессе, и тяжёлая база не съедает память соседних.

Перезапуск рабочего процесса по лимиту памяти может оборвать длинные операции: закрытие месяца, обмен, обновление. Не ставьте лимиты впритык к рабочему объёму — начните с запаса 30–50% и смотрите журнал.

Пример расчёта для сервера на 32 ГБ, где СУБД стоит на той же машине:

КомуСколько
Windows и служебные процессы4 ГБ
MS SQL (max server memory)16 ГБ
Все rphost вместе10 ГБ
Запас2 ГБ
Итого32 ГБ

Обновление платформы

Утечки памяти в рабочих процессах — известная история отдельных сборок платформы. Если rphost растёт без нагрузки, а в выходные память не возвращается, поставьте актуальную сборку той же ветки, которую поддерживает ваша конфигурация. Её список совместимых платформ указан в описании релиза конфигурации.

Расширение дискового пространства сервера 1С

Под «памятью» часто имеют в виду и диск. На сервере 1С место заканчивается в предсказуемых местах:

  • 📁 файлы баз СУБД и журналы транзакций (.mdf, .ldf у MS SQL, каталог data у PostgreSQL);
  • 🗂️ журнал регистрации каждой базы в каталоге кластера: C:\Program Files\1cv8\srvinfo\reg_1541\<GUID базы>\1Cv8Log;
  • 🧩 сеансовые данные и временные файлы рабочих процессов в том же каталоге reg_1541;
  • 💾 резервные копии, которые никто не удаляет;
  • 📄 файл подкачки pagefile.sys и база tempdb у MS SQL.

Как освободить место

  1. Журнал транзакций MS SQL. Если .ldf весит больше самой базы, у базы модель восстановления FULL, а резервных копий журнала нет. Либо настройте регулярное резервное копирование журнала, либо переведите базу в SIMPLE, если вам не нужно восстановление на момент времени. Затем сожмите файл журнала.
  2. Журнал регистрации 1С. В конфигураторе откройте Администрирование → Настройка журнала регистрации. Там уровень регистрации и кнопка сокращения журнала: старые записи можно выгрузить в файл и удалить из базы.
  3. Старые копии. Настройте хранение по сроку: например, ежедневные — 14 дней, ежемесячные — год. Копии лучше хранить вне сервера.

Пример команды для MS SQL — перевод в простую модель и сжатие журнала. Выполняйте в окно, когда никто не обновляет базу:

ALTER DATABASE [buh] SET RECOVERY SIMPLE;
USE [buh];
DBCC SHRINKFILE (N'buh_log', 1024);

Имя логического файла журнала смотрите в свойствах базы (Свойства → Файлы), оно не всегда совпадает с именем базы.

Очистка каталога сеансовых данных snccntx* в srvinfo помогает при «распухшем» кэше кластера, но требует остановки службы агента сервера. Все пользователи будут отключены. Делайте это вне рабочего времени и только после копии каталога srvinfo.

Как добавить место

  • Физический сервер: новый диск или массив, база СУБД и журнал регистрации переносятся на него. Для MS SQL переносят файлы базы через отсоединение и присоединение либо через изменение пути файлов.
  • Виртуальная машина: увеличьте виртуальный диск в гипервизоре, затем в Windows Управление дисками → Расширить том.
  • Каталог кластера: при установке сервера 1С можно указать каталог srvinfo на отдельном томе. Перенос существующего каталога — с остановкой службы и правкой параметров её запуска.

Настройка MS SQL и PostgreSQL под объём памяти сервера

СУБД — главный потребитель ОЗУ на сервере 1С. Без настройки она либо забирает лишнее, либо работает с маленьким кэшем на большой машине.

MS SQL Server

По умолчанию MS SQL готов занять всю доступную память. Задайте потолок в SQL Server Management Studio: Свойства сервера → Память → Максимальный размер памяти сервера. Или командой:

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 16384;
RECONFIGURE;

Изменение применяется без перезапуска службы. Сколько отдавать: на выделенном сервере СУБД оставьте Windows 4–6 ГБ, остальное — SQL. Если на этой же машине работает сервер 1С, вычтите ещё объём под rphost.

💡 Право «Блокировка страниц в памяти» (Lock pages in memory) для учётной записи службы SQL защищает кэш СУБД от вытеснения в файл подкачки. Назначается в локальной политике безопасности.

PostgreSQL

Основные параметры лежат в postgresql.conf. Ориентиры для сервера, где PostgreSQL делит машину с сервером 1С:

ПараметрЧто задаётОриентир
shared_buffersОбщий кэш данных25% ОЗУ
effective_cache_sizeОценка кэша ОС для планировщика50–75% ОЗУ
work_memПамять на одну сортировку или хеш32–128 МБ
maintenance_work_memПамять для VACUUM и индексов512 МБ – 2 ГБ
max_connectionsЧисло соединенийПо числу пользователей с запасом

Подвох в work_mem: его выделяют на каждую операцию в каждом соединении. 200 соединений по 128 МБ теоретически дают 25 ГБ. Поэтому большой work_mem ставят только при умеренном числе соединений.

shared_buffers и max_connections применяются после перезапуска службы PostgreSQL. Это обрывает сеансы 1С, поэтому планируйте перезапуск вне рабочего дня.

Облако и несколько серверов вместо одного большого

Когда один сервер упёрся в потолок платы или бюджета, есть три варианта.

ВариантКогда подходитМинусы
Вынести СУБД на отдельный серверСУБД и 1С дерутся за ОЗУ на одной машинеНужна быстрая сеть, вторая лицензия Windows
Добавить рабочий сервер в кластер 1СМного пользователей, rphost занимают основную памятьЧасть функций кластера зависит от редакции лицензии сервера
Перейти в облако или на арендуНужна гибкость: добавить 16 ГБ за деньЕжемесячная плата, зависимость от провайдера

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

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

Облако. Арендованный сервер с 32 ГБ ОЗУ ориентировочно обходится в несколько тысяч — пару десятков тысяч рублей в месяц, в зависимости от провайдера, дисков и лицензий. Память меняется в панели управления, обычно с перезагрузкой ВМ.

Сколько памяти нужно серверу 1С

Точную цифру даёт только замер, но для старта годятся ориентиры (сервер 1С и СУБД на одной машине):

  • до 10 пользователей — 16 ГБ;
  • 10–30 пользователей — 32 ГБ;
  • 30–70 пользователей — 64 ГБ;
  • больше — 128 ГБ и выше или разнос по серверам.

Размер базы влияет не меньше числа пользователей. Если база занимает 100 ГБ, а ОЗУ 16, СУБД будет постоянно читать с диска.

Мониторинг памяти сервера 1С, чтобы не доводить до сбоя

Настроить один раз — и узнавать о проблеме раньше пользователей.

Регулярный контроль памяти сервера 1С
Выполнено: 0 / 7

Для поиска утечек в самой конфигурации служит технологический журнал платформы. Его включают файлом logcfg.xml в каталоге conf платформы. Сбор журнала нагружает диск, поэтому его включают на время расследования, с ограничением по событиям и сроку хранения.

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

Сколько памяти может использовать 32-битный рабочий процесс 1С?
Несколько гигабайт, независимо от объёма ОЗУ на сервере. Если процессы упираются в этот потолок, нужен 64-битный сервер 1С.
Помогает ли увеличение файла подкачки?
Только как страховка от падений. Работа из файла подкачки в разы медленнее, чем из ОЗУ, поэтому вместо реальной памяти он не подходит.
Нужно ли перезапускать сервер 1С после изменения лимитов памяти в консоли?
Нет, параметры кластера и рабочего сервера применяются без перезапуска службы. Новые лимиты сработают при следующей проверке.
Почему после добавления ОЗУ стало не быстрее?
Скорее всего, СУБД ограничена старым лимитом памяти или узкое место в диске. Поднимите max server memory или shared_buffers под новый объём.
Файловую базу 1С ускорит добавление памяти на сервер?
Частично: ОС закэширует файл базы. Но файловый режим быстро упирается в блокировки и сеть, и после 5–10 активных пользователей рациональнее переходить на клиент-серверный вариант.