Как настроить кластер 1С и MSSQL, если процесс rphost потребляет слишком много оперативной памяти?

Системный администратор 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

Одной из самых распространенных проблем при эксплуатации систем на базе 1С:Предприятие 8.3 является прогрессирующее поглощение оперативной памяти рабочими процессами rphost. Это приводит к деградации производительности, «тормозам» в интерфейсе и, в конечном итоге, к аварийному завершению сеансов пользователей. Ситуация осложняется, когда на одном физическом сервере (или виртуальной машине) сосуществуют и сервер приложений 1С, и СУБД MSSQL. В этой статье мы подробно разберем, как правильно распределить ресурсы, настроить кластер и оптимизировать работу системы, чтобы избежать «пожирания» памяти.

Анализируем распределение памяти: золотое правило

Рассмотрим типовую ситуацию на примере сервера с 32 ГБ ОЗУ, на котором работают около 15 пользователей в конфигурации «Управление торговлей 11». Если оставить настройки по умолчанию, MSSQL со временем попытается занять всю доступную память под свой кэш (Buffer Pool), а процессы rphost, имеющие свойство накапливать кэш метаданных и утечки, начнут бороться с СУБД за остатки ресурсов. Результат — уход системы в Swap (файл подкачки), что равносильно остановке работы из-за низкой скорости дисковых операций.

Для стабильной работы нам необходимо принудительно распределить лимиты. Разберем формулу для сервера 32 ГБ:

  1. Операционная система (Windows Server): необходимо зарезервировать минимум 2–4 ГБ. Это обеспечит стабильность самой ОС и системных служб.
  2. Служебные процессы и фоновые задачи: заложим еще 1 ГБ на сторонние утилиты и антивирусы.
  3. Сервер приложений 1С (rphost): для тяжелых конфигураций вроде УправлениеТорговлей или ERP рекомендуется закладывать от 512 МБ до 1 ГБ на одного активного пользователя. Для 15 пользователей это составит примерно 8–12 ГБ.
  4. MSSQL Server: все, что осталось. В нашем примере: 32 - 4 - 12 = 16 ГБ.

Важно: Это значение (16 ГБ) необходимо жестко прописать в настройках MSSQL (параметр Max Server Memory), иначе СУБД не остановится и заберет всё.

Настройка параметров кластера серверов 1С

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

Разберем ключевые параметры по шагам:

  1. Допустимый объем памяти (Allowed memory volume): Этот параметр не является жестким лимитом, который «отрезает» память. Это порог, при достижении которого кластер помечает процесс как «проблемный» и начинает процедуру его замены. Для сервера 32 ГБ рекомендуем выставить значение порядка 25 000 000 КБ (около 24-25 ГБ). Это критическая отметка, выше которой серверу станет совсем плохо.
  2. Интервал превышения допустимого объема памяти: Если rphost превысил указанный выше порог, через сколько секунд он должен быть перезапущен? Рекомендуем установить 120–300 секунд. Это даст возможность текущим длительным операциям (например, формированию тяжелого отчета) завершиться до того, как процесс будет «убит».
  3. Количество соединений на один рабочий процесс: Для «тяжелых» конфигураций (УТ 11, ERP) крайне нежелательно держать всех пользователей в одном rphost. Если процесс упадет — вылетят все. Оптимально установить 10–12 соединений. В нашей ситуации это создаст 2 рабочих процесса, что распределит нагрузку и повысит отказоустойчивость.
  4. Выключенные процессы (Graceful shutdown): Обязательно убедитесь, что включен механизм плавного завершения. В этом случае кластер запускает новый процесс для новых подключений, а старый «доживает», пока последние пользователи из него не выйдут.

Безопасность и защита от «кривых» запросов

Выясним причину резких скачков потребления памяти. Часто это происходит из-за одного некорректного отчета, который пытается выгрузить миллионы строк в таблицу значений. Чтобы один пользователь не вешал весь сервер, настроим параметр Безопасный расход памяти за один вызов.

Для современной конфигурации на управляемых формах рекомендуем установить значение 2 000 000 КБ (около 2 ГБ). Если какой-то вызов функции превысит этот лимит, система прервет выполнение именно этой операции, сохранив жизнь всему процессу rphost и работу остальных коллег.

Оптимизация MSSQL и взаимодействие с ОС

Рассмотрим настройку, которую часто забывают сисадмины, — Lock Pages in Memory (Закрепление страниц в памяти). Когда 1С внезапно требует много памяти, Windows может попытаться «сбросить» кэш SQL-сервера в файл подкачки, чтобы удовлетворить запрос 1С. Для SQL это катастрофа: производительность падает в десятки раз.

Выполним следующие шаги для настройки:

  1. Откроем Локальная политика безопасности (secpol.msc).
  2. Перейдем в Локальные политики -> Назначение прав пользователя.
  3. Найдем пункт Закрепление страниц в памяти (Lock pages in memory).
  4. Добавим туда учетную запись, под которой запускается служба SQL Server.
  5. Перезагрузим службу SQL.

Это заставит SQL Server держать свой Buffer Pool строго в физической памяти, не позволяя операционной системе отправлять его в своп.

Мониторинг эффективности (SQL PLE)

Проанализируем ситуацию: как понять, что выделенных 16 ГБ для SQL достаточно? Для этого существует показатель PLE (Page Life Expectancy) — ожидаемое время жизни страницы в кэше. Посмотреть его можно через системные мониторы SQL или простым запросом:


SELECT [object_name], [counter_name], [cntr_value]
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Buffer Manager%'
AND [counter_name] = 'Page life expectancy'

Для сервера с 32 ГБ памяти нормальным считается значение выше 300-500 секунд. Если вы видите, что PLE падает ниже 100, это означает, что SQL постоянно вытесняет данные из памяти на диск. В таком случае у вас два пути: либо увеличивать объем физической ОЗУ, либо искать и оптимизировать тяжелые запросы в 1С, которые «вымывают» кэш.

Регламентное обслуживание кластера

Даже при идеальных настройках rphost склонен к фрагментации памяти. Поэтому разберем обязательный регламент — Интервал перезапуска рабочих процессов. В настройках кластера (свойства сервера) установите перезапуск раз в 86 400 секунд (24 часа). Оптимально настроить время перезапуска на ночные часы. Это позволит каждое утро начинать работу с «чистыми» процессами, в которых еще нет накопленных ошибок и утечек.

Подведем итог: стабильная работа 1С достигается не поиском одной «волшебной кнопки», а балансировкой ресурсов между ОС, СУБД и сервером приложений. Ограничение Max Server Memory для SQL, настройка лимитов и перезапусков в кластере 1С, а также использование Lock Pages in Memory — это необходимый минимум для любого администратора 1С.

← На главную