Автоматический перезапуск рабочих процессов (rphost) кластера 1С

20.01.23

Администрирование - Сервера

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
1C RpHost Manager win-x64
.zip 869,09Kb
11
11
10 SM
Скачать Купить за 4 550 руб.
1C RpHost Manager win-x86
.zip 857,75Kb
0
0
10 SM
Скачать Купить за 4 550 руб.

Исходный код разработки на GitHub

Поддерживаемая версия платформы 1С: 8.3.15 и выше.

Рабочий процесс (rphost) 1С иногда может потреблять большое количество оперативной памяти. Это может происходить по разным причинам. Главная проблема при этом заключается в том, что может происходить фрагментация памяти рабочего процесса или её перерасход, так называемая утечка памяти. Следствием этого может являться деградация производительности всего кластера 1С в целом и данного рабочего процесса в частности.

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

В случае превышения установленного лимита расхода  памяти на один рабочий процесс служба rphost-manager регулирует свойство TemporaryAllowedProcessesTotalMemory (временно допустимый объём памяти всех рабочих  процессов)   соответствующего рабочего сервера таким образом, чтобы менеджер кластера 1С начал перезапуск его rphost'ов штатными средствами. После перезапуска служба rphost-manager возвращает эти настройки к исходным значениям.

 

Установка службы rphost-manager

  1. Установить .NET Core 3.1.
  2. Установить COMConnector 1C, выполнив команду от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.15.1778\bin\comcntr.dll"
  1. Распаковать содержимое установочного архива в любой каталог.
  2. Установить сервис Windows, выполнив команду от имени администратора:
sc create "1C RpHost Manager" binPath="D:\RphostManager\rphost-manager.exe"

 

Описание настроек службы rphost-manager

  • LogSize - размер лога программы в байтах. По достижению этого лимита файл лога перезаписывается.
  • CLSID - идентификатор COM объекта "V83.COMConnector". Данная настройка используется только в том случае, если она заполнена. В противном случае используется ProgID "V83.COMConnector".
  • InspectionPeriodicity - периодичность инспекции объёма памяти, используемого rphost'ами, в секундах.
  • ServerAddress - адрес центрального сервера 1С.
  • UserName - имя пользователя для подключения к кластеру 1С.
  • Password - пароль пользователя для подключения к кластеру 1С.
  • WorkingServerResetWaitTime - период ожидания переключения rphost'ов менеджером кластера 1С в нерабочее состояние в секундах.
  • WorkingProcessMemoryLimit - лимит памяти для одного rphost'а в килобайтах. Используется только в том случае, если не определён список индивидуальных настроек для рабочих серверов WorkingServerMemoryLimits.
  • WorkingServerMemoryLimits - список рабочих серверов 1С, которые нужно инспектировать, и лимит памяти rphost'а для каждого сервера в отдельности. Если список пустой, то инспектируются все сервера кластера, а в качестве лимита памяти rphost'а используется настройка WorkingProcessMemoryLimit. Если сервер не указан, то его инспекция не производится.

 

Пример настройки для всех рабочих серверов кластера 1С

Лимит памяти для одного рабочего процесса для всех рабочих серверов установлен на уровне 4 Gb

{
  "LogSize": 131072,
  "CLSID": "",
  "InspectionPeriodicity": 180,
  "ServerAddress": "tcp://MSK01:1540",
  "UserName": "",
  "Password": "",
  "WorkingServerResetWaitTime": 10,
  "WorkingProcessMemoryLimit": 4194304,
  "WorkingServerMemoryLimits": {},
  "HostOptions": {
    "ShutdownTimeout": "00:00:30"
  }
}

 

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

Для сервера MSK01-SRV01 установлен лимит памяти одного рабочего процесса на уровне 1 Gb

Для сервера MSK01-SRV02 установлен лимит памяти одного рабочего процесса на уровне 2 Gb

Настройка WorkingProcessMemoryLimit игнорируется.

Важно: имена серверов указываются так, как они отображаются в консоли управления кластером 1С.

{
  "LogSize": 262144,
  "CLSID": "181E893D-73A4-4722-B61D-D604B3D67D47",
  "InspectionPeriodicity": 300,
  "ServerAddress": "tcp://MSK01:1540",
  "UserName": "",
  "Password": "",
  "WorkingServerResetWaitTime": 10,
  "WorkingProcessMemoryLimit": 2097152,
  "WorkingServerMemoryLimits": {
    "MSK01-SRV01": 1048576,
    "MSK01-SRV02": 2097152
  },
  "HostOptions": {
    "ShutdownTimeout": "00:00:30"
  }
}

 

Разработка прошла опытно-промышленную эксплуатацию на кластере из 4-х рабочих серверов 1С. Показала себя успешно. Иногда используется для ситуативного перезапуска какого-нибудь одного "распухшего" рабочего процесса.

rphost

См. также

Мониторинг Сервера Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

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

1 стартмани

18.07.2024    321    2    moolex    0    

3

Сервера Linux Системный администратор Россия Бесплатно (free)

Тема Ubuntu, PostgreSQL и 1С уже избитая. Но все же, следуя инструкциям всех мануалов, пришлось потратить около 3-х дней. И как результат — готовые скрипты для установки сервера 1С и PostgreSQL на свежей Ubuntu за 5 минут.

14.06.2024    1710    user1389975    10    

32

Мониторинг Сервера Системный администратор Программист Платформа 1С v8.3 Управляемые формы Абонемент ($m)

Размер, имя информационной базы из реестра кластера (файл 1CV8Clst.lst), дата последнего изменения файлов в каталоге баз (srvinfo\reg_*\uuid) центрального сервера. Отдельно показан размер индекса ППД (полнотекстовый поиск данных) и его актуальность. Полезна в случае, если у вас удалялись базы 1С и никто не озаботился удалением журналов регистрации.

1 стартмани

15.05.2024    931    13    MaximSh    0    

6

Сервера Системный администратор Программист Платформа 1С v8.3 Россия Бесплатно (free)

Меня зовут Павел Белоусов, я работаю Ведущим программистом 1С в компании OCS Distribution. Хочу поделиться историей, как мы столкнулись с постоянными зависаниями dev-сервера 1C, каким образом решили проблему и какие любопытные уроки вынесли из ситуации.

12.04.2024    4047    pbelousov    57    

26

Linux Сервера Системный администратор Платформа 1С v8.3 Абонемент ($m)

Сказ о том, как сделать "кошерный" запуск серверов хранилища конфигураций (вдруг еще кто-то до сих пор пользуется) и удаленного администрирования под GNU/Linux с использованием systemd

1 стартмани

07.09.2023    5150    Sloth    0    

23

Мониторинг Сервера Администрирование СУБД Системный администратор Бесплатно (free)

Как быстро познакомиться с системой на новой работе или если вас пригласили провести аудит контура на 1С? О том, какие инструменты использовать для быстрой проверки настроек сервера 1С, сервера MS SQL и общей оценки инфраструктуры на производительность, на конференции Infostart Event 2021 Post-Apocalypse рассказал архитектор 1С Юрий Былинкин.

01.06.2023    11899    ardn    19    

83

Сервера Администрирование веб-серверов Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подробная пошаговая инструкция (как делал я) установки Сервера взаимодействия версия 22.0.26 на Windows Server 2022. Установка собственного объектного хранилище с помощью системы MinIO (https://min.io/). Настройка Сервера взаимодействия для обмена файлами в сообщениях.

1 стартмани

07.04.2023    16214    VPanin56    47    

77
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user1198184 28.01.23 19:10 Сейчас в теме
Добрый всем день, вечер :)

Коллеги, а кто-то пользовался этой утилитой?

Я хотел поставить на два сервера - на одном без проблем встала и отлично работает. А вот на втором затык с COM+ объектами...
Не могу решить...
В логах вот такая ошибка:

[дата-время] V83.COMConnector initialized successfully.
[дата-время] Connecting tcp://192.168.2.254:1540 ...
[дата-время] Failed to connect tcp://192.168.2.254:1540.
Library not registered. (0x8002801D (TYPE_E_LIBNOTREGISTERED))
[дата-время] Connecting tcp://192.168.2.254:1540 ...
[дата-время] Failed to connect tcp://192.168.2.254:1540.
Library not registered. (0x8002801D (TYPE_E_LIBNOTREGISTERED))
[дата-время] Connecting tcp://192.168.2.254:1540 ...
[дата-время] Failed to connect tcp://192.168.2.254:1540.
Library not registered. (0x8002801D (TYPE_E_LIBNOTREGISTERED))

и так до бесконечности...

как понять какая библиотека ругается или как починить?
2. swenzik 16.05.23 14:22 Сейчас в теме
Соединение = Новый COMОбъект("V83.COMConnector");   
Агент=Соединение.ConnectAgent("localhost:1540");
Кластеры = Агент.GetClusters();
Кластер = Кластеры.GetValue(0);
Агент.Authenticate(Кластер,"","");
РабочиеПроцессы  = Агент.GetWorkingProcesses(Кластер);
РабочиеСерверы =  Агент.GetWorkingServers(Кластер);
РабочийСервер=РабочиеСерверы.GetValue(0);
//МассивСессий = Агент.GetSessions(Кластер).Выгрузить();

ОбщийРасходПамяти=0;
МаксимальныйПроцесс=0;
Для каждого Процесс из РабочиеПроцессы цикл
	ОбщийРасходПамяти=ОбщийРасходПамяти+Процесс.MemorySize;
	Если Процесс.IsEnable тогда
		МаксимальныйПроцесс=МАКС(МаксимальныйПроцесс,Процесс.MemorySize);
	КонецЕсли;
КонецЦикла;

Если МаксимальныйПроцесс>1024*1024*30 тогда
	РабочийСервер.TemporaryAllowedProcessesTotalMemory  = ОбщийРасходПамяти*1024;
	Агент.UpdateWorkingServer(Кластер,РабочийСервер);
	ЗапуститьПриложение("Timeout /T 5 /NoBreak",,Истина);
	РабочийСервер.TemporaryAllowedProcessesTotalMemory  = 0;
	Агент.UpdateWorkingServer(Кластер,РабочийСервер);
КонецЕсли;
Показать
3. swenzik 16.05.23 15:42 Сейчас в теме
и кстати TemporaryAllowedProcessesTotalMemory не режет рпхосты, якобы оно что-то помечает непроизводительным и перестаёт навешивать новые соединения. а вот при превышении CriticalProcessesTotalMemory оно выбирает из всех рпхостов самый жирный и прибивает его. так что в предыдущем комментарии надо поменять две строки кода
4. ybatiaev 59 20.12.23 15:24 Сейчас в теме
(3) Доброго дня! Поменять какие строчки? Можете текст итоговый тут разместить?
Заранее спасибо!
Оставьте свое сообщение