Утечка памяти в 1С Предприятии

Бывают случаи, когда процесс rphost отъедает много ОЗУ (Иногда даже всю свободную).

Как правило, это происходит при аварийном завершении работы процесса (случается утечка) или конечно, неоптимальный код приводит к таким последствиям.

В результате, даже соседним процессам «Сервера 1С» ее может не хватать, как и всем остальным процессам на данном сервере (особенно если на борту уже есть MS SQL, сервер терминалов, веб сервер и прочие).

К слову, подобные вещи уже давно происходят и с MS SQL, чьи аппетиты не редко приходится усмирять администраторам.

Собственно борьбой с утечками памяти мы и будем заниматься в сегодняшней статье.

Разберем различные способы, которые позволяют решить проблему «утечек» памяти rphost – а.

В 1С признают официально, что утечки памяти есть (на техническом уровне), и проблема не решена. Обещают решить с выходом версии 8.3.20. Также есть надежда, что с выходом 8.3.20 решат и в целом проблему повышено потребления памяти процессами 1С.

На «Сервер 1С» к сожалению, не все так просто как с MS SQL, здесь есть и ограничения версии «ПРОФ», и новые версии платформы. К примеру с 8.3.15 убрали возможность настройки «Допустимый объем памяти», что дополнительно давало нам возможность самим влиять на потребление памяти одного rphost-а. Некоторые настройки перенесли в «Параметры рабочего сервера».

УТЕЧКА ПАМЯТИ В 1С ПРЕДПРИЯТИИ

 

 

Правда, обещают, что с версии 8.3.20 вернут обратно некоторые настройки регулирования потребления ОЗУ и для версии «ПРОФ», так как на сегодня, это возможно сделать, только используя «КОРП».

В 1С также временами не могут определиться, что оставить в «ПРОФ» а что перенести в «КОРП»:

https://wonderland.v8.1c.ru/blog/ryad-parametrov-kontrolya-obema-pamyati-protsessov-mozhno-budet-delat-s-litsenziey-prof/

Что также здорово «запутывает» пользователя.

 

Но и это еще не все )

Многие эксперты утверждают, что настроек «Сервера 1С» по умолчанию вполне достаточно, и что «Сервер 1С» не надо перезапускать.

Это утверждение только отчасти является верным!

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

А утечки случаются и при небольших нагрузках (на «ПРОФ») и они как минимум могут требовать перезапуска рабочих процессов (rphost) так и более тонких настроек.

Правдой является и то, что перезапуск целого «Сервера 1С» не является «острой» необходимостью, так как корректного перезапуска rphost-а почти всегда достаточно, чтоб освободить память, и не навредить пользователям, которые в этот момент могут работать в 1С Предприятии.

 

Перезапуск «Сервера 1С» делаем только когда это действительно необходимо.

(К примеру, разово, в начале расследования утечки памяти).

Далее будет достаточно перезапуска rphost.

 

В разы же возрастает необходимость внесения правок, если у нас «КОРП»!

Есть высоконагруженные системы, где работают сотни пользователей, тогда действительно требуется чаще вносить изменения в параметры руками на «Сервере 1С», сюда и создание отказоустойчивого кластера, путем добавления «Рабочего сервера», также настройка, направленная на борьбу с утечками памяти (они встречаются и в «КОРП») а их в кластере будет еще больше.

А вот что касается части настроек с целью повысить как то производительность «Сервера 1С» (Не учитывая создания отказоустойчивого кластера серверов 1С), то вот здесь настройки  как для «ПРОФ» так и «КОРП» будут малоэффективные.

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

 

Что ж, глубину проблемы мы с вами уяснили, теперь начинаем «распутывать».

Сперва разберемся, какое потребление rphost считать за нормальное.

Если говорить прямо, то сегодня на один RPHOST уже уходит больше 4ГБ ОЗУ.

В более старых конфигурациях 1С, эта цифра может быть меньше, а вот в новых (особенно ERP и подобных «тяжелых») , 10 -15 и больше ГБ, уже будет за норму.

 

ВАЖНО!

Напрасно надеется, что «Серверу 1С» хватит пары Гб, что остались у вас свободны, и тут никакие оптимизации не спасут!

 

Что в основном влияет на потребление ОЗУ процессом rphost:

  1. Количество сеансов
  2. Конфигурации 1С
  3. КОД (Качество написания)
  4. Фоновые задачи (Порожденные регламентными заданиями).
  5. Версия платформы 1С

 

Первое что стоит сделать в борьбе с утечкой:

Останавливаем «Сервер 1С», и очистим кэш на «Сервере 1С»!

И затем после его запуска в «боевых» условиях мы посмотрим на потребление ОЗУ в течение короткого времени от 30 мин до ~часа.

В этот период (30 мин – час) все пользователи (или около того) должны работать в 1С Предприятии,  и мы увидим более-менее реальное потребление rphost-ов.

Бывает, что rphost чрезмерно потребляет ОЗУ не сразу,  а на протяжении всего рабочего дня или даже нескольких дней. (Можно увидеть «утечку»).

 

После чего надо пройтись по сеансам!

С них я и всегда предлагаю начинать расследование, так как именно ошибки (не оптимально написанный код) чаще всего и вызывает «утечки».

 

Находим показатель

Память (текущая) в сеансах.

Это объем переданных и полученных данных с момента начала клиентского соединения (в байтах).

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

Затем получив список объектов, мы проводим их диагностику на уровне кода в конфигурации, конечно с привлечением программиста 1С.

Если после анализа,  качество кода конфигурации 1С не вызывает у вас сомнения (разобрали что происходит в сеансах пользователей), тогда это и будет «обычное» (или близкое к этому) потребление RPHOST-ов ОЗУ у Вас.

В том случаи, если вместо «приложения» у вас «фоновая задача» кушает много ОЗУ, следует разобрать ее.

Если автор «фонового» известен, тогда поиск проблемы будет сильно упрощен, нам останется только отключить регламентные задачи, которые породили «фоновое задание», что у нас и имеет сильное потребление. (Вкладка Администрирование – Регламентные и фоновые задания).

Если вместо пользователя у вас автор «фоновой задачи» «DefUser» или трудно, поймать, кто запускает «фоновую задачу».

Тогда можно пойти другим путем и в целом на «Сервере 1С» установить «Блокировку регламентных задач» после чего перезапустить «Сервер 1С».

Конечно, совет будет вредным если рег. задания у вас в конфигурации нужны!

 

Далее рассмотрим случай, когда явно есть «утечка памяти», а разбор кода и отключение регламентных задач не решили проблему:

Обычно в этом случаи администраторы выполняют перезапуск «Сервера 1С», прямо скажем не очень хорошая идея, особенно когда это происходит посреди рабочего дня.

Более правильно, но только для «Аврала» ) будет установка «интервала перезапуска» в свойствах локального кластера:

 

Установив 86400 секунд, мы автоматизируем процесс перезапуска рабочего процесса раз в сутки (Ночью).

 Сделайте настройку так, чтоб не попасть в рабочее время!

Конечно, это не решит проблему «утечки» но с симптомом позволит бороться, это на тот случай если у вас абсолютно нет времени предпринять что-то более изящное.

 

Раз уж мы заговорили о более правильном способе, то он состоит из настроек на перезапуск rphost-a в свойствах «Параметры рабочего сервера» (Только для КОРП!).

Как на картинке выше установим значение «Временно допустимый объем памяти процессов» в байтах (у нас это 15 ГБ).

И интервал превышения допустимого объема памяти процесса 300 сек.

Что будет происходить после установки значений выше: 

Читать далее...

Зарегистрируйтесь, чтоб продолжить чтение статьи
Зарегистрироваться / Войти


Если Вы хотите больше узнать о технической стороне 1С, тогда регистрируйтесь на первый бесплатный модуль курса: Администратор 1С >>>

С уважением, Богдан.

Оставьте ответ

[an error occurred while processing the directive]
[an error occurred while processing the directive]