Ошибка установки параметров автоматического перезапуска рабочих процессов

Зачастую на машине вместе с сервером 1С:Предприятие работают другие службы — терминальный сервер, SQL-сервер и т.д. И в какой-то момент сервер 1С:Предприятие, а точнее рабочий процесс rphost отъедает памяти больше чем планировалось или же всю память. Что приводит к замедлению работы других служб и зомбированию сервера. Для избежания таких ситуаций необходимо настроить автоматический перезапуск рабочих процессов сервера 1С:Предприятия

Решение

1. Откроем консоль администрирования серверов 1С Предприятия;
2. Развернем дерево центрального сервера до кластеров и выделим интересующий наc кластер. В примере кластер всего один;
3. Откроем свойства выделенного кластера и увидим следующую форму

Настраиваем автоматический перезапуск рабочих процессов сервера 1С:Предприятия 8.3

Свойства кластера сервера 1С:Предприятие 8.3

Разберем пример указанный на изображении:

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

Допустимый объем памяти — объем памяти, в пределах которого рабочий процесс может без проблемно работать. Объем указывается в килобайтах, в примере указана величина в 20 гигабайт(на самом деле цифра слишком большая и отталкиваться необходимо от конкретной системы, но средняя цифра 4 Гб ). Как только память занятая рабочим процессом превысит указанную величину, так начинается отсчет времени.

Интервал превышения допустимого объема памяти — после того как таймер запущенный после превышения допустимого объема памяти отсчитает указанное время, будет запущен новый рабочий процесс, на который передаются все соединения, старый процесс помечается как выключенный. Интервал указывается в секундах, в примере указаны 30 секунд.

Выключенные процессы останавливать через — время, через которое будет остановлен рабочий процесс, помеченный как выключенный, если указано значение 0, то процесс не будет завершен. Интервал указывается в секундах, в примере указаны 60 секунд.

После применения настроек можно не перезапускать службу сервера, они применяться динамически.

Итого

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

Так же в некоторых ситуациях можно играть настройками, и предотвратить возможное падение сервера при допущении ошибок.

Известный факт, что при длительном функционировании сервера 1С:Предприятия 8, с течением времени увеличивается размер занимаемой рабочим процессом (rphost.exe) оперативной памяти. Так же при выполнении не оптимального кода или допущении ошибки в запросе, в этот момент рабочий процесс может занять всю оперативную память, что неминуемо приведет к замедлению работы пользователей вплоть до полной потери контроля над сервером.

Чтобы избежать этих проблем необходимо задать настройки кластера 1С:Предприятия 8 и создать необходимое количество рабочих процессов. По моему опыту +1 рабочий процесс на каждые 25-35 пользователей. Рисунок настроек кластера 1С:

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

Интервал перезапуска — это время по прошествии которого, рабочий процесс автоматически будет перезапущен. Перед завершением работы старого рабочего процесса, запускается новый экземпляр rphost.exe на который передаются соединения со старого рабочего процесса. 

Допустимый объем памяти — это размер памяти при превышении которого, запускается таймер отсчета в секундах.

Интервал превышения допустимого объема памяти — в том случае, когда таймер отсчета в секундах превысил значение заданого в этом параметре, запускается новый рабочий процесс на который передаются соединения от старого рабочего процесса. Старый рабочий процесс помечается как не активный.

Выключенные процессы останавливать через — этот параметр означает, когда пройдет 30 секунд, после того как рабочий процесс помечен не активен, он будет завершен операционной системой. Если значение будет равно «0» — процессы автоматически завершаться не будут.

Данная настройка работает безотказно почти год. Необходимость перезапуска службы 1С:Предприятия 8 исчезла, зависания сервера уже не наблюдалось больше полугода. Даже при выполнении некоректных запросов с огромными выборками, механизм отрабатывает на ура, отключая только пользователя от базы, который запустил этот отчет, остальные пользователи, которые работали на текущем рабочем процессе плавно (без отключения от базы) будут перенесены на новый рабочий процесс.

Перезапуск рабочих процессов сервера 1С

Модератор: Дмитрий Юхтимовский

Перезапуск рабочих процессов сервера 1С

Добрый день!
Сервер платформа 1С 8.2.19.130 (64 бит).
3 рабочих процесса, 1 резервный.
Настроен перезапуск процессов в случае превышения объема памяти в размере 10Гб на протяжении 30 мин.
Выявлена следующая проблема:
В процессе работы пользователей производится одновременный перезапуск ВСЕХ рабочих процессов. В результате некоторые сеансы пользователей прекращают работу с получением сообщения «Сеанс прерван администратором…».
В этом случае в диспетчере задач видно уже не 3 процесса rphost, а больше (5 или 6). С каждым таким перезапуском рабочих процессов количество rphost растет. При перезапуске процессов кроме всего этого могут появиться сеансы, блокирующие базу, которые не видно через консоль. Помогает только перезапуск сервера 1С.
В чем может быть проблема? Какие инструменты могут помочь локализовать проблему и найти решение?
В какую сторону копать?

Заранее спасибо за помощь.

Nemchenko
 
Сообщений: 3
Зарегистрирован: 07 июн 2015, 09:25

Re: Перезапуск рабочих процессов сервера 1С

Сообщение Гилёв Вячеслав » 09 июн 2015, 16:56

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

Гилёв Вячеслав
 
Сообщений: 2543
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва

Re: Перезапуск рабочих процессов сервера 1С

Сообщение Andreynikus » 09 июн 2015, 20:26

Nemchenko писал(а):Добрый день!
Сервер платформа 1С 8.2.19.130 (64 бит).
3 рабочих процесса, 1 резервный.
Настроен перезапуск процессов в случае превышения объема памяти в размере 10Гб на протяжении 30 мин.
Выявлена следующая проблема:
В процессе работы пользователей производится одновременный перезапуск ВСЕХ рабочих процессов. В результате некоторые сеансы пользователей прекращают работу с получением сообщения «Сеанс прерван администратором…».
В этом случае в диспетчере задач видно уже не 3 процесса rphost, а больше (5 или 6). С каждым таким перезапуском рабочих процессов количество rphost растет. При перезапуске процессов кроме всего этого могут появиться сеансы, блокирующие базу, которые не видно через консоль. Помогает только перезапуск сервера 1С.
В чем может быть проблема? Какие инструменты могут помочь локализовать проблему и найти решение?
В какую сторону копать?

Заранее спасибо за помощь.

1. Нужен скрин настроек кластера.
2. Нужен скрин диспетчера задач в момент появления проблемы. Сейчас непонятно 10Гб превышает только 1 рабочий процесс или каждый рабочий процесс превышает 10 Гб.
3. То что число рабочих процессов увеличивается это нормально, т.к. при достижении порога сначала запускается новый процесс, затем завершается старый через время указанное в параметре «Выключенные процессы останавливать через», если этот параметр равен 0 то старый процесс не будет завершен.
4. Ваша проблема очень похожа на утечку памяти. Если у вас несколько баз, то необходимо для начала понять в какой из баз проблема. Для этого можно разнести базы по разным кластерам и понаблюдать, рабочий процесс какого из кластеров будет загружать память. Как будет понятно что это за база или если база у вас одна, тогда нужно будет включить ТЖ на сбор данных по событию LEAKS указанной базы. Если повезет и это утечки из за кода конфигурации, то по логам будет понятно что это за код. Если по логам разобраться не получилось, тогда нужно снять дампы всех процессов сервера утилитой ProcDump в момент воспроизведения проблемы и отправить в тех. поддержку 1С.

Andreynikus
 
Сообщений: 2
Зарегистрирован: 09 июн 2015, 20:23

Re: Перезапуск рабочих процессов сервера 1С

Сообщение Nemchenko » 10 июн 2015, 10:02

Во вложении скрины настроек.

Проблема в том что перезапуск процессов происходит одновременно всех без привязки к размеру используемой памяти.
Момент перезапуска предугадать невозможно.
Я убрал ограничения по использованию памяти. Убрал резервный процесс как советовал Гилев.
Запустил сбор данных в технологический журнал по утечкам памяти.

Вложения
2015-06-10 09_55_43-bsrvr1 — Подключение к удаленному рабочему столу.png
Рабочие процессы
2015-06-10 09_55_43-bsrvr1 — Подключение к удаленному рабочему столу.png (10.91 KiB) Просмотров: 19413
2015-06-10 09_54_42-bsrvr1 — Подключение к удаленному рабочему столу.png
Настройка сервера
2015-06-10 09_54_42-bsrvr1 — Подключение к удаленному рабочему столу.png (12.91 KiB) Просмотров: 19413
Nemchenko
 
Сообщений: 3
Зарегистрирован: 07 июн 2015, 09:25

Re: Перезапуск рабочих процессов сервера 1С

Сообщение Andreynikus » 10 июн 2015, 23:12

Ну судя по скрину у вас каждый процесс занимает много памяти, потому они все и перезапускались.
Жаль что не 8.3, там можно было бы отследить какой именно сеанс занимает память.
В 8.2 остается только надеятся что ТЖ что-то внятное покажет.

Andreynikus
 
Сообщений: 2
Зарегистрирован: 09 июн 2015, 20:23

Re: Перезапуск рабочих процессов сервера 1С

Сообщение Гилёв Вячеслав » 11 июн 2015, 19:30

а сколько у вас оперативной памяти на сервере?

Гилёв Вячеслав
 
Сообщений: 2543
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва

Re: Перезапуск рабочих процессов сервера 1С

Сообщение Nemchenko » 15 июн 2015, 08:26

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

Nemchenko
 
Сообщений: 3
Зарегистрирован: 07 июн 2015, 09:25


Вернуться в Прочее

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Если на настроенном Сервере 1С в связке с MS SQL Server — rphost загружает процессор или виртуальную память. Нам поможет настройка интервала перезапуска рабочих процессов в локальном кластере.

1)      

Выполняем на Windows Server: Пуск — 1C Предприятие 8 (x86-64) – Дополнительно — Администрирование серверов 1С Предприятия.

2)      

Выбираем наш 1С Сервер – Кластеры – Локальный кластер. Заходим в его свойства.

3)      В свойствах «Локального кластера заполняем графы. У меня на сервере установлены следующие параметры:

Интервал перезапуска 86400 секунд (24 часа)

Интервал времени после запуска процесса, по истечении которого рабочий процесс перезапускается. Нулевое значение означает, что рабочие процессы не будут перезапускаться автоматически.

Допустимый объем памяти 2000000 KB (оставим 2ГБ памяти на съедение)

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

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

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

P.S. – Windows Server 2008 R2 Enterprise + Microsoft SQL Server 2008 R2 + Сервер 1С+ платформа 1С:Предприятие 8.3 (8.3.5.1383). Полёт нормальный).

Доброго времени суток. Платформа 8.3.18.1741 выполняю нижеследующий код

ИнтервалПерезапуска = 86400;

V82COMConnector= Новый COMОбъект(ОбщегоНазначения.ИмяCOMСоединителя());

СоединениеСАгентомСервера = V82COMConnector.ConnectAgent(ИмяСервера);

Кластер = СоединениеСАгентомСервера.GetClusters().GetValue(0);

СоединениеСАгентомСервера.Authenticate(Кластер,»»,»»);

СоединениеСАгентомСервера.SetClusterRecyclingByTime(Кластер,ИнтервалПерезапуска);

а интервал перезапуска остаётся без изменений, но когда дописываю

СоединениеСАгентомСервера.SetClusterRecyclingExpirationTimeout(Кластер,ИнтервалПерезапуска);

значение «Проблемные процессы завершать через» изменяется

СП читал, ничего дельного по этому поводу не нашёл. У гугла спрашивал, ответа не получил. Сижу и думаю, то ли лыжи не едут, то ли у меня не всё в порядке с головой

Замедление работы «1С:Управление торговлей» через 6 часов после запуска сервера «1С»

Большое предприятие ведет свою деятельность в клиент-серверной базе основанной на «1С:Управление торговлей» ред.11.2. При длительной работе более 6 часов с момента запуска сервера от пользователей стали поступать жалобы об общем замедлении работы системы. При этом замедление наблюдалось буквально во всем: открытие форм объектов, формирование отчетов, проведение документов и так далее.

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

Оглавление

  1. Необходимые сведения об устройстве сервера «1С»
  2. Параметры стенда
  3. Расследование
    1. Повышенный расход памяти и возможные причины
    2. Штатные возможности по оптимизации платформы «1С:Предприятие»
    3. Поиск решения
  4. Решение
    1. Скрипт перезапуска рабочих процессов

Необходимые сведения об устройстве сервера «1С»

Работа кластера серверов

На рисунке представлены элементы, которые задействованы в работе кластера серверов, а именно:

  • процессы кластера серверов:
    • ragent.exe,
    • rmngr.exe,
    • rphost.exe.
  • хранилища данных:
    • список кластеров,
    • реестр кластера.

Функционирование компьютера в составе кластера обеспечивается процессом ragent.exe, который называется агентом сервера. Соответственно компьютер, на котором запущен агент сервера, называется рабочим сервером. Одной из функций агента сервера является ведение списка кластеров, расположенных на данном рабочем сервере.

Непосредственно кластер серверов включает в себя следующие элементы:

  • один или несколько процессов rmngr.exe;
  • реестр кластера;
  • один или несколько процессов rphost.exe.

Процесс rmngr.exe называется менеджером кластера. Этот процесс управляет функционированием всего кластера.

Процесс rphost.exe называется рабочим процессом. Рабочий процесс обслуживает непосредственно клиентские приложения, взаимодействует с сервером баз данных и в нем, в частности, могут исполняться процедуры серверных модулей конфигурации.

В процессе своей работы рабочий процесс со временем потребляет все больше памяти, что в конечном счете приводит к падению производительности сервера. Таким образом, объем памяти занимаемый рабочим процессом в некоторой степени коррелирует со степенью его деградации.

Параметры стенда

Будет рассматриваться поведение платформы на примере доработанной конфигурации основанной на «1С:Управление торговлей» ред. 11.2.

  • Сервер 1С под Windows.
  • Одновременно работающих пользователей около 800.
  • ОЗУ 192Гб. Абсолютное значение памяти не так существенно. Важно, что через какое-то время рабочие процессы замедляются (деградируют) даже при видимом свободном объеме памяти.
  • Остальные параметры также не существенны.

Расследование

Повышенный расход памяти и возможные причины

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

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

Штатные возможности по оптимизации платформы «1С:Предприятие»

Для отказоустойчивой и производительной работы кластер серверов «1С:Предприятие» предусматривает возможность перезапуска рабочих процессов. Однако, настройки условий перезапуска рабочих процессов могут быть сильно ограничены в разных версиях платформы.

Например, в версии ПРОФ платформы 8.3.15 можно настроить перезапуск рабочих процессов либо по времени, например, каждый час, либо при превышении объема памяти всех рабочих процессов заданного лимита, что не всегда является оптимальным.

Поиск решения

В сервере «1С:Предприятие» есть некий пул соединений, которые могут использоваться разными сеансами по мере необходимости. В то время как сеанс бездействует у него нет соединения. Лишние соединения закрываются не сразу, а примерно через 15–20 минут.

При перезапуске рабочего процесса все сеансы находящиеся на нем необходимо переместить на другой рабочий процесс, при этом в процессе переноса открывается соединение. Именно поэтому перезапуск рабочих процессов наглядно видно на графике количества соединений.

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

Удобно видеть перезапуск, отслеживая загрузку процессора, а также количество соединений.

Удобно видеть перезапуск, отслеживая загрузку процессора, а также количество соединений

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

Показана загрузка ЦП сервера за тот же период

В рассматриваемом прикладном решении процесс перезапуска всех рабочих процессов мог длиться до 20 минут, при этом средняя загрузка ЦП поднималась выше 60%. Длительность операции перезапуска рабочего процесса зависит от количества сеансов и размера сеансовых данных в каждом из них, а также от степени деградации процесса, чем дольше он не перезапускался, тем дольше будет длиться его перезапуск. Из-за этого несколько раз в день отзывчивость сервера значительно падала, что сопровождалось жалобами пользователей.

После перехода прикладного решения на 8.3.15.1830 появилась возможность использовать параметр

«ВременноДопустимыйОбъемПамятиПроцессов»

не только в КОРП, но и в версии ПРОФ. Однако, попытки использовать его не привели к желаемому результату. Поскольку параметр ограничивает общий объем памяти всех рабочих процессов.

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

Когда же лимит будет превышен начнется перезапуск рабочих процессов, но процесс будет слишком частый, как и в предыдущем случае.

Очевидно, для того чтобы реализовать регулярный, но не слишком частый перезапуск деградировавших рабочих процессов параметр

«ВременноДопустимыйОбъемПамятиПроцессов»

необходимо постоянно изменять в зависимости от количества сеансов или количества активных рабочих процессов. Но как вычислить эту зависимость не совсем ясно.

Решение

Скрипт перезапуска рабочих процессов


$WorkBaseServer = "ServerName:1540"
$IBNameWorkBase = "BaseName"
$Connector = new-object -comobject "V83.COMConnector" 
$AgentConnection = $Connector.ConnectAgent($WorkBaseServer) 
$Clusters = $AgentConnection.GetClusters() 
$Cluster = $Clusters.GetValue(0) 
$AgentConnection.Authenticate($Cluster,"Login","Password") 
$WorkingProcesses = $AgentConnection.GetWorkingProcesses($Cluster)
$WorkingServers = $AgentConnection.GetWorkingServers($Cluster)
$mem = 0
ForEach ($wp In $WorkingProcesses)
{
	if ($wp.IsEnable)
	{
        		$mem = $mem + $wp.MemorySize
	}
}

$mem = $mem*1024
$mem = $mem - 1024*1024*512
if ($mem -gt 1024*1024*1024*4)
{
	$WorkingServers[0].TemporaryAllowedProcessesTotalMemory = $mem
	$AgentConnection.UpdateWorkingServer($Cluster,$WorkingServers[0])
	Start-Sleep -s 5
	$WorkingServers[0].TemporaryAllowedProcessesTotalMemory = 0
	$AgentConnection.UpdateWorkingServer($Cluster,$WorkingServers[0])
}

Показана загрузка ЦП сервера за тот же период

Для решения проблемы был написан скрипт.  Логика работы скрипта следующая:  раз в 10 минут производится  суммирование объема памяти всех активных рабочих процессов, устанавливается параметр 

«ВременноДопустимыйОбъемПамятиПроцессов»

в значение равное полученной сумме за вычетом 512Мб, чтобы получить гарантированное превышение по памяти.

Далее скрипт ожидает, пока один из рабочих процессов перейдет в выключенное состояние, и устанавливает параметр

«ВременноДопустимыйОбъемПамятиПроцессов»

в ноль.

Таким образом, достигается постепенный равномерный перезапуск рабочих процессов. Причем перезапуск рабочих процессов делается строго по одному и перезапускается рабочий процесс занимающий самый большой объем памяти. Жалобы пользователей прекратились.

Постепенный равномерный перезапуск рабочих процессов

Постепенный равномерный перезапуск рабочих процессов

Еще статьи по теме оптимизации производительности «1С»:

  • База «1С» растёт и всё тормозит. Что делать?
  • Ускоряем в 3 раза открытие сложной формы в 1С 8.3
  • Страничные блокировки в MS SQL Server при проведении документа в документе в 1С

Чтобы не пропустить новые статьи из цикла «От экспертов 1С-Рарус» подпишитесь на рассылку «Новости компании 1С‑Рарус». Рассылка будет приходить 1 раз в две недели и содержать ссылки на все новые статьи, опубликованные на rarus.ru.

Авторы статьи

Зачастую на машине вместе с сервером 1С:Предприятие работают другие службы — терминальный сервер, SQL-сервер и т.д. И в какой-то момент сервер 1С:Предприятие, а точнее рабочий процесс rphost отъедает памяти больше чем планировалось или же всю память. Что приводит к замедлению работы других служб и зомбированию сервера. Для избежания таких ситуаций необходимо настроить автоматический перезапуск рабочих процессов сервера 1С:Предприятия

Решение

1. Откроем консоль администрирования серверов 1С Предприятия;
2. Развернем дерево центрального сервера до кластеров и выделим интересующий наc кластер. В примере кластер всего один;
3. Откроем свойства выделенного кластера и увидим следующую форму

Настраиваем автоматический перезапуск рабочих процессов сервера 1С:Предприятия 8.3

Свойства кластера сервера 1С:Предприятие 8.3

Разберем пример указанный на изображении:

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

Допустимый объем памяти — объем памяти, в пределах которого рабочий процесс может без проблемно работать. Объем указывается в килобайтах, в примере указана величина в 20 гигабайт(на самом деле цифра слишком большая и отталкиваться необходимо от конкретной системы, но средняя цифра 4 Гб ). Как только память занятая рабочим процессом превысит указанную величину, так начинается отсчет времени.

Интервал превышения допустимого объема памяти — после того как таймер запущенный после превышения допустимого объема памяти отсчитает указанное время, будет запущен новый рабочий процесс, на который передаются все соединения, старый процесс помечается как выключенный. Интервал указывается в секундах, в примере указаны 30 секунд.

Выключенные процессы останавливать через — время, через которое будет остановлен рабочий процесс, помеченный как выключенный, если указано значение 0, то процесс не будет завершен. Интервал указывается в секундах, в примере указаны 60 секунд.

После применения настроек можно не перезапускать службу сервера, они применяться динамически.

Итого

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

Так же в некоторых ситуациях можно играть настройками, и предотвратить возможное падение сервера при допущении ошибок.

У многих возникают проблемы с rphost.exe, разного вида:

  • rphost занимает всю память
  • rphost грузит процессор
  • rphost жрет память

причем 1С даже на запущена, а в диспетчере следующее:

ежеминутно расчет на 2-3 мегабайта.

Как быть и что делать?

Решение проблем с rphost

То что 1С у пользователей не запущено — не значит что сервер 1С не должен работать

Он работает- выполняя фоновые задания:

Есть несколько вариантов решения:

1. Обновить платформу 1С и поддерживайте ее в актуальном состоянии

2. Перезапустить сервер или службу Агент 1С Предприятия, но это временное лечение.

3. Отключить выполнение фоновых заданий (но тогда часть операции заложенных в программу не будет выполнено)

Отключить можно в свойствах базы

Установите галку Блокировка регламентных заданий включена и нажмите ОК

Для типовых конфигураций советую отключить обновление Полнотекстового поиска:

4. В консоли администрирования в настройках кластера выставить предел ОП и периодичность перезапуска рабочих процессов

На этом тестовом сервере пока всего 2GB памяти, поэтому когда rphost съедает память на 600 — 850 мегабайт, свободной память остается только 6% — сервер тормозит нереально

Установим следующие параметры для рабочих процессов:

Основное: 500 мб — допустимый объем памяти и Режим распределения нагрузки — Приоритет по памяти

Заметки сисадмина о интересных вещах из мира IT, инструкции и рецензии. Настраиваем Компьютеры/Сервера/1С/SIP-телефонию в Москве

Настройка автоматического перезапуска рабочих процессов rphost.exe сервера 1С 8.3

Иногда, при экономии на “железе” мы сталкиваемся с проблемой дефицита оперативной памяти. Если среди работающих программ есть сервер 1С:Предприятие то он может быть одним из виновников этой проблемы. Рабочий процесс сервера 1С – rphost имеет обыкновение разрастаться до очень больших, зачастую кратно превышающих размер самих баз 1С размеров. Для профилактики такого поведения средствами 1С можно настроить автоматический перезапуск рабочих процессов сервера 1С:Предприятия. Итак, настраиваем автоматический перезапуск rphost:

1. Открываем консоль администрирования серверов 1С Предприятия;

2. Разворачивая дерево центрального сервера до кластеров и выделим интересующий наc кластер. Если мы хотим настроить параметры перезапуска для одного сервера в кластере с несколькими серверами, то вместо кластера стоит выбрать сервер.

3. Открываем свойства выделенного кластера(или сервера) и видим меню настройки рабочих процессов:

В полученном меню нас интересует:

  • Интервал перезапуска — время в секундах через которое процесс rphost будет независимо от его размера принудительно перезапущен. На картинке указан интервал в 24 часа.
  • Допустимый объем памяти — объем памяти, в килобайтах пределах которого рабочий процесс может без проблемно работать. При превышении указанного объёма в течении времени указанного в графе “Интервал превышения допустимого объема памяти” процесс rphost будет принудительно перезапущен. На картинке указан размер 1 гигабайт. Отсчет времени начинается когда память занятая рабочим процессом превысит указанную величину
  • Интервал превышения допустимого объема памяти — Интервал в секундах. Таймера запускается в момент превышения допустимого объёма памяти и отсчитывает указанное количество секунд, после чего будет запущен новый рабочий процесс rphost, на который передаются все соединения, старый процесс помечается как выключенный.
  • Выключенные процессы останавливать через — время в секундах, через которое будет остановлен рабочий процесс, помеченный как выключенный, если указано значение 0, то процесс не будет завершен.

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

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

Анализ причин роста сеансовых данных

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

При вызове методов: ПоместитьВоВременноеХранилище, ПоместитьФайл, НачатьПомещениеФайла, значения указанные в параметрах, записываются в сеансовые данные.

При фоновом исполнении отчетов СКД, результат отчета помещается в сеансовые данные, а затем передается в клиентскую часть.

С точки зрения операционной системы, сеансовые данные представляют собой файлы в каталоге …srvinforeg_<номер порта>snccntx<GUID>.

С точки зрения внутренней структуры — это noSQL база данных (key-value storage).

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

За работу с сеансовыми данными отвечает менеджер кластера – rmngr.exe Если в кластере несколько рабочих серверов, то сеансовые данные будут расположены в соответствии с требованиями назначения функциональности.

Если требования не заданы, то сеансовые данные распределятся равномерно по всем рабочим серверам.

Сеансовые данные растут блоками по 64 Мб. Когда заканчивается блок, то менеджер кластера выделяет следующий блок в 64Мб.Блоки большего объема возможны в результате помещения объемных данных во временные хранилища.

Для обеспечения скорости работы, платформа всегда пишет новые данные в конец, аналогично transaction log в СУБД. Таким образом, размер сеансовых данных постоянно растет. Во всем объеме сеансовых данных, существуют как актуальные, так и устаревшие данные. Актуальность данных определяется способом их помещения:

  • Если сеансовые данные помещены из формы и в качестве идентификатора передается идентификатор формы (ЭтаФорма.УникальныйИдентификатор), то данные считаются актуальными, пока открыта форма.
  • Если в качестве идентификатора передан УникальныйИдентификатор, не являющийся уникальным идентификатором формы (Новый УникальныйИдентификатор), то значение перестанет быть актуальным после завершения сеанса пользователя.
  • Если ничего не передано, то значение перестанет быть актуальным при любом следующем серверном вызове.

Перед выделением следующего блока на диске, проверяется, прошло ли 5 секунд с момента выделения предыдущего блока. Если 5 секунд прошло, то запускается «сборщик мусора» (key value garbage collector). Сборщик оценивает процент актуальных сеансовых данных в общем объеме. Если актуальные данные занимают менее 25% от общего объема, то все актуальные данные копируются в новые файлы, а затем все старые файлы сеансовых данных удаляются.

Так как каждый сеанс (клиенты, фоновые задания, web-сервисы) в своей работе постоянно пишет информацию в сеансовые данные, то при большом количестве пользователей, скорость дисковой подсистемы, на которой расположены файлы сеансовых данных, играет очень важную роль. При большом количестве пользователей, рекомендуется располагать файлы сеансовых данных на максимально быстрых дисках. Желательно RAM-drive. Отказоустойчивость дисков не важна, т.к. при потере сеансовых данных, никакой важной информации утеряно не будет.

Следует отметить порядок размещения сеансовых данных. Если поместить во временное хранилище двоичные данные или файл, то эти данные пройдут в качестве потока байт через rphost, затем в rmngr, который сбросит этот поток на диск. Если же, в качестве помещаемого значения, будет выступать коллекция (таблица значений, результат запроса, массив…), то сначала вся эта коллекция разместиться в памяти rphost, а только затем преобразуется в поток байт и будет передана в rmngr.

Размещение сеансовых данных в памяти

При работе кластера «1С:Предприятия», файлы сеансовых данных отображаются в память (mapping). Подробнее см. статью.

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

Однако, в операционной системе Windows, отображенные в память файлы, влияют на счетчик MemoryAvailable Mbytes. При сильном росте сеансовых данных можно увидеть следующую картину:

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

Размер памяти, указанный в колонке Standby – это неиспользуемая память (фактически свободная). При запросе памяти любым процессом, ему будет выделена память из этой области.

Следует учитывать данную особенность счетчика MemoryAvailable Mbytes при построении систем мониторинга или приложений, которые опираются на объем доступной оперативной памяти.

Для косвенной оценки эффективности работы операционной системы с сеансовыми данными, можно использовать счетчик MemoryPage Faults/sec, который показывает на сколько часто процессы обращаются за страницами в память, но не находят их там и подгружают с диска.

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

Проблемы сеансовых данных

Ошибка совместного доступа к файлу snccntx.dat

При появлении данной ошибки необходимо действовать по алгоритму:

1. Проверить права на папку сеансовых данных для пользователя, от которого запущена служба сервера «1С:Предприятия». Должны быть полные права.

2. Открыть на рабочем сервере диспетчер задач, установить видимость колонки «Командная строка»

3. Необходимо найти процессы rmngr.exe с одинаковым значением параметра –pid.

4. Открыть консоль кластера. Развернуть ветку кластера, порт которого соответствует параметру –regport , найденных rmngr.exe с одинаковым значением параметра –pid

5. Сопоставить PID из диспетчера задач с PID в консоли кластера. Тот процесс rmngr.exe, которого нет в консоли – принудительно завершить.

Закончилось место на диске, где расположены сеансовые данные

Необходимо следить за наличием свободного места на диске, где расположены сеансовые данные.

Не следует размещать файлы технологических журналов на одном диске с сеансовыми данными.

Если на диске, где расположены сеансовые данные, закончится место, то картина будет совершенно «апокалиптическая». Менеджер кластера будет постоянно завершаться с формированием дампа. Начнутся сотни попыток запусков рабочих процессов, которые сразу же будут завершаться с ошибками. После того, как на диске появится свободное место, сервер «1С:Предприятия» запустится в нормальном режиме.

Так же, необходимо следить за размером самих сеансовых данных. Если периодически их размер становится существенным, то необходимо обратить на это особое внимание. Следует помнить, что при срабатывании «сборки мусора» необходимо наличие свободного места на диске, в размере 25% от общего объема сеансовых данных. Если этих 25% не будет, то кластер завершит свою работу аварийно.

Изменить расположение сеансовых данных, можно указав параметр –d в строке запуска службы агента сервера.

В данном каталоге, также расположены: реестр кластера, индекс полнотекстового поиска и журнал регистрации.

Влияние циклических ссылок на рост сеансовых данных

Чаще всего при выполнении процедуры ПоместитьВоВременноеХранилище, указывается идентификатор формы (ЭтаФорма.УникальныйИдентификатор). Как написано в документации, при указании идентификатора формы данные перестают считаться актуальными после того как форма будет закрыта.

Однако, если форма содержит в себе циклические ссылки (см. статью), то после закрытия формы она не уничтожается. Это приводит следующим отрицательным эффектам:

  • данные формы остаются в памяти
  • сеансовые данные, выделенные для формы, считаются актуальными, пока не будет завершен сеанс

Чтобы избежать данной ситуации, необходимо исключить все циклические ссылки в форме (см. статью).

Необходимо стараться формировать отчеты СКД в фоновом режиме. Так как результат отчета помещается во временное хранилище фоновым заданием, то после завершения задания данный результат будет считаться неактуальным.

Методика анализа роста сеансовых данных

Сбор данных

Необходимо собрать технологический журнал:

Данный технологический журнал может занимать значительный объем. Поэтому необходимо располагать его на дисках имеющих достаточно свободного пространства, периодически переносить старые файлы журнала на другой диск и там архивировать (сохраняя структуру папок).

После того, как технологический журнал будет собран, необходимо провести «парсинг» и выгрузить его данные в файлы csv формата:

На основании данных, которые собраны в папках rmngr_*, необходимо сформировать csv файл вида:

  • <файл ТЖ> – имя файла технологического журнала,
  • <CallID> – значение свойства CallID,
  • <InBytes> — значение свойства InBytes.

В файле …/rmngr_7188/ 15063011. log есть строка:

Данная строка должна быть преобразована в строку:

Необходимо исключить из итогового файла строки с InBytes=0, т.к. они не представляют интереса, но занимают значительный объем.

На основании данных, которые собраны в папках rphost_*, необходимо сформировать csv файл вида:

  • <процесс>– имя папки рабочего процесса,
  • <файл ТЖ> – имя файла технологического журнала,
  • <t:clientID> – значение свойства t:clientID,
  • <CallID> – значение свойства CallID.

В файле …/ rphost_1352 / 15063011 .log есть строка:

Данная строка должна быть преобразована в строку:

На основании данных, которые собраны в папках rphost_*, необходимо сформировать csv файл вида:

  • <процесс> – имя папки рабочего процесса,
  • <t:clientID> – значение свойства t:clientID,
  • <Usr> – Имя пользователя из свойства Usr.

В файле …/ rphost_1352 /15063011.log есть строка:

Данная строка должна быть преобразована в строку:

В итоге должно получиться 3 файла: scall.csv, call.csv, conn.csv

Пример создания файлов csv, на основании данных технологического журнала, см. в обработке.

Создание базы данных для анализа

Необходимо создать пустую базу данных (MS SQL Server), в которую добавить таблицы:

Затем, в эти таблицы необходимо загрузить данные из соответствующих csv файлов. Сделать это можно с помощью SQL Server Integration Services

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

Анализ работы с сеансовыми данными

TOP – 10 пользователей в разрезе процессов и времени

Запрос покажет топ-10 пользователей, которые поместили больше всего сеансовых данных в час. Затем необходимо разобраться с самым верхним (в текущем случае):

Т.е. в процессе rphost_1352 за час с 11-00 по 12-00 пользователь с идентификатором 518 записал в сеансовые данные 2 046 616 858 байт (2Гб).

Далее, необходимо найти все идентификаторы вызовов, которые записывал сеанс 518:

  • Ошибка установки пакета обновления vas pc
  • Ошибка установки пакета open 4
  • Ошибка установки пакета amd catalyst на ноутбуке
  • Ошибка установки ошибка доступа к файлу проверьте запущенные процессы epic games
  • Ошибка установки ошибка 3 не удалось скопировать файлы монитора порта