Рассмотрим распространенную и крайне неприятную ситуацию: сервер 1С:Предприятие неожиданно начинает прерывать работу пользователей, генерируя ошибку «Недостаточно памяти». При этом при анализе ресурсов физического или виртуального сервера выясняется, что оперативной памяти доступно еще достаточно много (например, свободными остаются около 10 ГБ), файл подкачки настроен корректно, а дисковое пространство не переполнено. Перезагрузка службы 1С временно решает проблему, но через некоторое время сбой повторяется.
Выясним причину такого поведения системы и разберем по шагам, как полностью устранить данную ошибку, настроить рабочие процессы и оптимизировать распределение ресурсов между сервером приложений и СУБД.
Для начала проанализируем, почему сервер 1С может сообщать о дефиците памяти при ее фактическом наличии в операционной системе. Главная причина кроется в архитектурных ограничениях разрядности запущенных процессов.
Если на сервере установлена 32-битная (x86) версия сервера 1С:Предприятие, то каждый рабочий процесс rphost физически не может использовать более 4 ГБ виртуального адресного пространства (на практике операционная система Windows по умолчанию ограничивает его вовсе 2 ГБ для пользовательских нужд). Когда процесс приближается к этому порогу, платформа выдает ошибку нехватки памяти и аварийно завершает работу.
Помимо жесткого лимита в 2–3 ГБ, существуют дополнительные факторы, провоцирующие сбой:
rphost аварийно завершится.Теперь рассмотрим комплекс мер для устранения этой проблемы — от радикальных и наиболее правильных до временных и профилактических.
Это самое надежное и стратегически верное решение. В 64-битных системах лимит адресного пространства на один процесс практически отсутствует (составляет до 8 ТБ), что полностью нивелирует проблему фрагментации виртуальной памяти процесса rphost.
Убедимся, какая именно разрядность сервера установлена в нашей системе. Для этого откроем диспетчер задач Windows и найдем процесс rphost. Если рядом с его именем отображается суффикс *32 или (32 бита), значит, мы используем устаревшую разрядность платформы.
Для миграции выполним следующие действия:
srvinfo).1C:Enterprise 8.3 Server Agent.rphost смогут свободно утилизировать всю физическую память сервера по мере необходимости.Если быстро перейти на x64-платформу не представляется возможным (например, из-за задержек с согласованием бюджета на лицензии), мы можем временно облегчить жизнь серверу с помощью настроек операционной системы и кластера 1С.
Увеличим лимит виртуальной памяти для пользовательских процессов в Windows с 2 ГБ до 3 ГБ. Для этого откроем командную строку от имени администратора и выполним следующую команду:
bcdedit /set increaseuserva 3072
После этого обязательно перезагрузим физический сервер. Это даст процессу rphost дополнительный гигабайт адресного пространства, что существенно снизит частоту возникновения ошибок.
Также временно снизим нагрузку на один рабочий процесс, изменив параметр «Количество соединений на один процесс» в свойствах рабочего сервера через утилиту администрирования кластера. Если по умолчанию там установлено значение 128, попробуем снизить его до 10–20. Это заставит кластер создавать новые процессы rphost для новых пользователей, распределяя их по разным адресным пространствам. Обратите внимание, что тонкая балансировка нагрузки доступна в полной мере на лицензиях КОРП, однако базовое уменьшение лимита соединений сработает и на ПРОФ лицензиях, помогая избежать перегрузки единственного процесса.
Чтобы процессы rphost не успевали накапливать критический объем утечек и фрагментировать память, настроим их автоматический и плавный перезапуск силами самого кластера 1С. Эти параметры доступны в свойствах нашего локального кластера в консоли администрирования.
Установим следующие параметры для контроля «прожорливости» процессов:
2 000 000 KB (около 2 ГБ). Для 64-битного сервера этот параметр рассчитывается исходя из общего объема ОЗУ на сервере за вычетом нужд ОС и SQL-сервера.60 секундам. Если процесс превышает лимит непрерывно в течение этого времени, он помечается как выключаемый.120 секунд. Это время, в течение которого старый процесс будет «доживать» и завершать текущие пользовательские запросы, пока новые пользователи уже незаметно перенаправляются на вновь созданный рабочий процесс.86400 секунд (ровно одни сутки). Это гарантирует, что раз в сутки каждый процесс будет превентивно заменен новым чистым процессом, что полностью решает проблему постепенного накопления утечек памяти. Оптимально настроить перезапуск на ночное время.Поскольку базы данных и сервер приложений 1С часто функционируют на одном физическом или виртуальном сервере, они вступают в жесткую конкуренцию за оперативную память. MS SQL Server по умолчанию спроектирован так, чтобы забирать под свой кэш абсолютно всю доступную серверу оперативную память.
Чтобы SQL-сервер не «душил» процессы 1С, жестко ограничим его аппетиты:
Рассчитаем лимит по следующей формуле: вычтем из общего объема оперативной памяти сервера 4 ГБ на нужды операционной системы и еще по 2 ГБ на каждый планируемый процесс rphost сервера 1С. Например, если на сервере установлено 20 ГБ ОЗУ, выделим под MS SQL Server не более 10–12 ГБ. Это оставит гарантированный буфер для стабильной работы службы 1С.
Если СУБД и сервер 1С работают локально на одной машине, обязательно проверим, чтобы в строке подключения к базе и настройках SQL был задействован протокол Shared Memory вместо TCP/IP. Это позволит процессу 1С общаться с СУБД напрямую через оперативную память, минуя сетевой стек, что снижает накладные расходы ресурсов и ускоряет работу.
Проанализируем сопутствующие факторы, которые могут вызывать перегрузку памяти на сервере приложений:
%TEMP% под учетной записью службы 1С) часто маскируется платформой под ошибку нехватки ОЗУ. Регулярно очищайте временные каталоги операционной системы и кэш сервера 1С (папки в каталоге srvinfo/reg_1541).File Summary поможет быстро локализовать файлы баз данных или временные таблицы, создающие пиковую нагрузку.Регулярно выполняя эти рекомендации, мы обеспечим стабильную и бесперебойную работу сервера 1С:Предприятие, исключив внезапные падения рабочих процессов из-за дефицита памяти.