Rphost что за процесс
Перейти к содержимому

Rphost что за процесс

  • автор:

Решение проблемы, когда Rphost ест память на Сервере 1С — Программист 1С Минск. Автоматизация бизнеса.

Решение проблемы, когда Rphost ест память на Сервере 1С

Данные > Статьи и инструкции > Администрирование

АДМИНИСТРИРОВАНИЕ 1С 8 → перейти в меню [СТАТЬИ И ИНСТРУКЦИИ]

Если на настроенном Сервере 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). Полёт нормальный).

Значительное потребление памяти процессами кластера на сервере приложений

По счетчику Performance Monitor \Memory\Available Mbytes видим, что объем доступной памяти близок к нулю.
Что делать?

Что требуется сделать

  1. Подключиться к указанному серверу
  2. Запустить RamMap
  3. Найти процесс, который использовал всю доступную оперативную память. Стоит также смотреть на закладку File Summary.
  4. Найти причину
  5. Если это процесс rphost, то открываем консоль администрирования серверов 1С
    • Переходим на страницу «Сеансы»
    • Находим колонку Память (текущая)
    • Упорядочиваем по колонке
    • Записываем номера сеансов, которые использовали больше всего памяти
    • Завершаем сеансы
    • Проверяем, успело ли сработать условие перезапуска процессов кластера серверов
    • Если есть сеансы, которые находятся в длительном клиент-серверном вызове, то записываем номера сеансов
    • Завершаем сеансы, убеждаемся, что процессы успешно перезапустились.
    • Убеждаемся, что памяти достаточно
  6. Если процесс rmngr и виновник не понятен, то снимаем дамп с помощью утилиты ProcDump
    • Полученные дампы и технологические журналы (если собирались) отправляем в 1С с подробным описанием проблемы и симптомов
    • Следует учитывать, что нет смысла отправлять дампы в 1С, если на сервере действительно очень мало доступной оперативной памяти, а rmngr при нормальной работе занимает ровно тот же самый объем
  7. Ищем в журнале регистрации полученные номера сеансов с целью выяснить сценарий, который выполнялся в момент воспроизведения проблемы. Анализируем.
  8. Проверяем, настроен ли перезапуск процессов кластера.

У кластера серверов 1С Предприятия есть несколько настроек перезапуска процессов по превышению порога памяти. Их можно найти в параметрах кластера в консоли администрирования(рис. 1).

Рис. 1. Параметры кластера.

Подробная информация по настройкам указана на странице ITS.

Рекомендуется всегда настраивать параметры

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

«Допустимый объем памяти» стоит устанавливать из расчета, того, что в случае срабатывания условия превышения показателя будет запущен ещё один процесс rphost того же объема, как при нормальной работе кластера серверов в этой информационной системе.

Например, на рабочем сервере имеем 12 Гб ОЗУ. Допустим для конкретной информационной системы характерен размер rphost около 3 Гб. В этом случае порог превышения памяти следует рассчитывать следующим образом:

«Допустимый объем памяти» = 12 ГБ — 2 Гб (объем, занимаемый процессами системы) — 3 Гб * 1 rphost (объем всех процессов rphost) = 7 Гб. Т.е. процесс rphost в худшем сценарии может вырасти до 7 Гб.

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

«Допустимый объем памяти» = 12 ГБ — 2 Гб (объем, занимаемый процессами системы) — 3 Гб * 2 rphost (объем всех процессов rphost) = 4 Гб. Т.е. процесс rphost в худшем сценарии может вырасти до 4 Гб.

Такая рекомендация исходит из особенностей поведения в момент перезапуска процессов кластера. Как это происходит:

  • процесс rphost превышает «Допустимый объем памяти» в течение «Интервал превышения допустимого объема памяти» секунд, срабатывает условие перезапуска процессов кластера.
  • запускается «новый» процесс rphost
  • «старый» процесс rphost выключается, но не завершается
  • соединения назначаются на «новый» процесс rphost, который сразу полноценно включается в работу
  • «старый» процесс будет исполнять вызовы (которые ещё существуют) максимум в течение ещё «Выключенные процессы останавливать через» секунд, но не более того.
  • через время «Выключенные процессы останавливать через» «старый» процесс rphost завершается.
  • новый процесс полноценно работает

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

Не следует указывать «Допустимый объем памяти» меньше нормального рабочего объема памяти процесса rphost для вашей системы, т.к. противном случае у вас постоянно будут перезапускаться процессы кластера серверов.

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

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

Чем больше значения указанных параметров, тем менее эффективен может оказаться механизм перезапуска процессов, но зато позволит «успешно выполнить» большее число вызовов.

Rphost что за процесс

rphost

Процесс rphost грузит процессор и память. 1С 8.3, решения для системных процессов. Архитектура кластера серверов 1С. Полнотекстовый поиск. Консоль управления кластером серверов 1С.

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

Архитектура кластера серверов 1С.

Основные возможности кластера серверов

  • может функционировать на одном или нескольких компьютерах (рабочих серверах);
  • на каждом рабочем сервере может функционировать один или несколько рабочих процессов, обслуживающих клиентские соединения в рамках данного кластера;
  • подключение новых клиентов к рабочим процессам кластера выполняется на основе анализа долгосрочной статистики загруженности рабочих процессов;
  • взаимодействие процессов кластера с клиентскими приложениями, между собой и с сервером баз данных осуществляется по протоколу TCP/IP;
  • процессы кластера сервера могут быть запущены как приложение, или как сервис.
Состав простейшего кластера серверов

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

Кластер серверов 1С

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

  • процессы кластера серверов:
    • ragent.exe;
    • rmngr.exe;
    • rphost.exe;
    • список кластеров;
    • реестр кластера.
    Агент сервера ragent.exe

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

    Агент сервера и список кластеров обеспечивают работу сервера и кластеров, которые расположены на нем. Эти компоненты не входят в состав кластера серверов.

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

    • rmngr.exe (может быть один или несколько процессов);
    • реестр кластера;
    • rphost.exe (может быть один или несколько процессов).
    Менеджер кластера rmngr.exe

    Rmngr.exe управляет функционированием кластера . М о жет существовать несколько таких менеджеров в составе кластера. В любом случае один из этих процессов всегда будет являться главным менеджером кластера. Другие — дополнительными менеджерами. Сервер, на котором запущен главный менеджер кластера и находится реестр кластера, будет именоваться центральным сервером кластера . Менеджер кластера, в том числе, обеспечивает ведение реестра кластера.

    Рабочий процесс rphost.exe.

    Rphost.exe занимается обслуживанием непосредственно клиентских приложений, он взаимодействует с сервером БД (баз данных), в нем исполняются процедуры серверных модулей конфигурации.

    Итак, теперь нам стала ясна роль и место рабочего процесса rphost.exe в конфигурации кластера серверов 1С:Предприятие.

    Проблемы с rphost.exe

    Теперь приступим к исследованию возможных неудобств в работе rphost.exe и вариантам их устранения.

    rphost.exe грузит память и занимает процессорное время

    rphost грузит процессор и память

    Как видно на картинке, отображающем диспетчер задач, процесс rphost.exe достаточно сильно загружает память сервера и его процессор. Причем 1С не работает ни в режиме приложения, ни в режиме конфигурирования.

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

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

    Как можно снизить расход ресурсов процессом rphost.exe

    Версия платформы. Прежде всего стоит проверить версию платформы 1С. И, если платформа не актуальна, то обновить ее. Лучше в любом случае поддерживать платформу в актуализированном состоянии.

    Фоновые задачи. Далее стоит проверить на предмет необходимости все фоновые задачи используемой конфигурации или нескольких конфигураций. В случае присутствия ненужных — их отключить или удалить. Делать это нужно аккуратно, вначале выполнив резервное копирование ИБ. Как сделать выгрузку ИБ можно посмотреть в статье: Как обновить сервер 1С 8.3 и платформу 1С 8.3. Как блокировать пользователей 1С. Как сделать выгрузку базы данных 1С. 1С Предприятие клиент-сервер. Операционная система Windows Server 2012 R2

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

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

    Список баз 1С в консоли сервера

    Далее нужно авторизоваться в информационной базе.

    авторизация ИБ

    После авторизации установите галочку возле опции «Блокировка регламентных заданий включена»

    Полнотекстовый поиск (отключение, включение).

    Как вариант, для уменьшения активности rphost.exe, можно отключить полнотекстовый поиск. Для справки, полнотекстовый поиск использует регламентные задания, которые запускают фоновые процессы. В конфигураторе отключать регламентное задание без снятия конфигурации с поддержки проблематично. Поэтому лучше отключить полнотекстовый поиск в режиме приложения.

    Заходим в главном меню, пункт «Все функции»

    Все функции

    Далее находим «Управление полнотекстовым поиском».

    Управление полнотекстовым поиском

    Отключаем полнотекстовый поиск.

    Отключить включить полнотекстовый поиск 1С

    Для включения полнотекстового поиска выполните те же действия, но переключите тумблер в состояние «Вкл».

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

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

    Для улучшения ситуации с загрузкой памяти процессом rphost.exe, установим в настройках кластера консоли администрирования кластера серверов 1С следующие параметры:

    Параметры перезапуска процессов 1С

    • Как в 1С создать и заполнить контрагента? 1С 8.2
    • Расходы будущих периодов в 1С 8.3
    • Как работать с таблицей значений 1С 8.3, 1С 8.2 Таблица значений 1С 8.3, 8.2 Примеры для разработчика 1С
    • Как в 1С:Бухгалтерии 8.3 ввести хозяйственную операцию? Как правильно создать документ по проводке?
    • Как в 1с 8.3 списать материалы? Акт на списание товарно-материальных ценностей
    • Как редактировать данные сотрудника в 1С. Кадровый учет в 1С. Изменение фамилии сотрудника в «1С:Бухгалтерия 8» (ред. 3.0)?
    • Настройка автоматической блокировки сеансов по расписанию на сервере 1С 8.3 . Как выгнать пользователей из 1С. Настройка задачи для планировщика Windows
    • Как создавать документы в «1С:Бухгалтерия 8.3 через проводку? Ручная операция, если известна корреспонденция счетов
    • Вопросы и ответы 1С для Андроид скачать. Как установить программу на планшет или телефон с Андроид? Как создать ярлык запуска на главном экране Андроид?
    • Как в 1С Бухгалтерия 8.2 выплатить зарплату?

    Если у Вас появились вопросы по статье или остались нерешенные проблемы обсудить их Вы можете на Форуме 1С Вопросы и ответы

    От экспертов «1С‑Рарус»: Повышение стабильности работы сервера 1С через оптимизацию запуска рабочих процессов в ПРОФ и КОРП версиях 1С:Предприятия

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

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

    В статье рассмотрены нестандартные подходы к настройке и обслуживанию сервера кластера 1С. Такие подходы могут дать ощутимый результат при эксплуатации высоконагруженного сервера 1С. Под высоконагруженными серверами будем полагать более 300–400 одновременных активных сеансов, независимо от используемой лицензии — КОРП или обычная лицензия.

    Особенности лицензий «1С:Предприятие КОРП»

    Лицензия КОРП предоставляет дополнительные возможности по настройкам, которые позволяют повысить стабильность работы кластера. В качестве примера можно отметить следующие возможности:

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

    При этом версия КОРП, так же как и обычная лицензия, имеет ограниченное количество сценариев для перезапуска рабочих процессов (РП):

    • Регулярный перезапуск РП через заданный интервал времени.
    • Перезапуск РП превысивших временно допустимый объем памяти рабочих процессов.

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

    Стоит принимать во внимание тот факт, что лицензия КОРП стоит существенно больше обычной лицензии.

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

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

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

    • Процессы кластера серверов:
      • ragent.exe;
      • rmngr.exe;
      • rphost.exe.
      • список кластеров;
      • реестр кластера.

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

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

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

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

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

      Влияние количества рабочих процессов на производительность и потребление памяти сервера 1С

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

      При настройке кластера эксперт оперирует следующими параметрами:

      • количество рабочих процессов;
      • количество соединений на процесс;
      • объем памяти на процесс;
      • интервал перезапуска рабочих процессов.

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

      Установить непосредственно можно только «Количество соединений на процесс» и «Интервал перезапуска РП». Остальные параметры можно регулировать только опосредованно.

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

      Универсальной рекомендации по настройке этих параметров не существует, поскольку они очень сильно зависят от конкретной конфигурации информационной базы, активности сеансов и объема оперативной памяти доступной кластеру. Есть так называемые «параметры по умолчанию», которые устанавливаются при создании нового кластера.

      Параметр «Количество соединений на процесс»

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

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

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

      Таблица: Сравнительный анализ по изменению количества рабочих процессов

      Таким образом, универсального решения здесь нет и нужно искать некий баланс между этими двумя крайностями.

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

      Из интересных особенностей управления параметром «Временно допустимый объем памяти процессов» можно отметить тот факт, что в документации ИТС указана возможность использования данного параметра только для лицензии КОРП. При этом установка параметра все же работает (он не игнорируется) с обычной лицензией в версиях платформы 8.3.15 (начиная с 8.3.15.1700), 8.3.17, 8.3.18. А, например, в версиях 8.3.16 он игнорируется.

      Параметр «Интервал перезапуска РП»

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

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

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

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

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

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

      Деградация рабочих процессов

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

      В сообществе специалистов 1С такое явление назвали «деградацией рабочих процессов». Гипотетически деградация РП может происходить по разным причинам:

      • фрагментация памяти рабочего процесса;
      • избыточное кэширование объектных данных платформой 1С;
      • наличие циклических ссылок объектов друг на друга;
      • наличие избыточных сеансовых данных.

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

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

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

      Деградация рабочих процессов

      Влияние деградации РП на пользователей может носить неожиданный характер. Например, когда сильно деградировал только один РП, большинство пользователей вообще не заметит негативных эффектов, а часть пользователей (в нашем случае это КоличествоПользователей/КоличествоРП) предъявляет жалобы на общее замедление работы системы. При чем такое замедление наблюдается буквально во всем: открытие форм объектов, формирование отчетов, проведение документов и т. п.

      Способы решения проблемы деградации рабочих процессов

      Увеличение количества рабочих процессов

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

      Разделение нагрузки на несколько рабочих серверов

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

      Своевременный перезапуск РП

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

      • Регулярный перезапуск РП через заданный интервал времени.
        Настройка этого параметра часто приводит к массовому перезапуску рабочих процессов запущенных одновременно. Что не всегда хорошо сказывается на времени реакции сервера в момент такого перезапуска.
      • Перезапуск РП превысивших временно допустимый объем памяти рабочих процессов.
        По умолчанию данный параметр установлен в «0». Это значит, что перезапуск РП будет осуществляться при превышении 80% памяти доступной кластеру. Поскольку рост потребления памяти происходит неравномерно между рабочими процессами и лишь косвенно указывает на степень деградации, то настроить своевременный перезапуск РП с помощью статичного указания временно допустимого объема памяти достаточно сложно.

      Своевременный перезапуск РП

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

      Сценарий 1 Сценарий 2
      Лимит 1 Есть явно деградировавший РП, но перезапуск его не происходит. Деградировали уже все РП, но перезапустится только один. А хотелось бы не доводить ситуацию до такого состояния и перезапускать заранее.
      Лимит 2 Есть явно деградировавший РП, есть его перезапуск. Слишком низкий лимит приводит к частому аварийному перезапуску множества РП сразу.

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

      Логика работы скрипта

      Раз в 10 минут производится суммирование объема памяти всех рабочих процессов, устанавливается параметр «временно допустимый объем памяти рабочих процессов» в значение равное полученной сумме за вычетом 512Мб, чтобы получить гарантированное превышение по памяти.

      Далее скрипт ожидает, пока один из рабочих процессов перейдет в выключенное состояние, и устанавливает параметр «временно допустимый объем памяти рабочих процессов» в ноль. Опционально, можно пропускать перезапуск РП если в текущий момент явно нет ни одного деградировавшего РП — память самого крупного РП не превышает некоего заведомо низкого значения, при котором перезапуск точно не нужен, например, 8ГБ.

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

      В качестве дополнительного бонуса к статье мы приводим примеры скриптов перезапуска рабочих процессов в двух вариантах: для Windows на PowerShell с использованием COM-объектов и для Linux на скрипте Bash с использованием RAC.

      Хотелось бы обратить внимание на то, что эти скрипты не претендуют на какую бы то ни было эталонность, а просто являются демонстрацией того, как можно программно управлять рассмотренными в статье настройками кластера. Для этого можно использовать RAC или COM-объекты и по вкусу завернуть все это в программу на любом понравившемся языке. Подробнее о настройке и запуске 1С под Linux читайте тут.

      DeleteWorkingProcess
      ByMemory.sh

      Скрипт для bash (в качестве параметра принимает номер порта кластера):

      #!/bin/bash

      logfile="/home/example/DeleteWorkflowByMemory_log.txt"
      echo $(date) start script on port $1 >> $logfile
      _path="/opt/1C/v8.3/8.3.17-1549"
      host=localhost:$1

      _cluster=$($_path/rac cluster list $host| grep 'cluster'| awk -F' ' '')
      _server=$($_path/rac server --cluster=$_cluster list $host| grep 'server '| awk -F' ' '')

      result=$($_path/rac process --cluster=$_cluster list $host| awk -F' ' ' if(match($1, "is-enable")&&match($3, "yes"))
      k=1;
      else if(match($1, "is-enable")&&match($3, "no"))
      k=0;

      else if(match($1, "pid"))
      pid=$3;
      else if(match($1, "memory-size"))
      sum += $3;
      mem = k*$3;
      arr_mem[pid] = mem
      #print "mem="mem;
      >
      >
      END for (i in arr_mem) if(arr_mem[i]>max)
      max = arr_mem[i]
      >
      print "sum=" sum "; max=" max "; i>')

      sum_mem=$(echo $result | awk -F';' ''| awk -F'=' '' ) #total memory in kilobytes
      max_mem=$(echo $result | awk -F';' ''| awk -F'=' '' ) #max memory in kilobytes
      $result | awk -F';' ''| awk -F'=' '' ) #max memory in kilobytes

      sum_mem=$((1024*$sum_mem)) #in bytes
      max_mem=$((1024*$max_mem)) #in bytes

      mem_limit=$((8*1024*1024*1024)) #8GB - single process memory threshold
      sum_mem_limit=$(($sum_mem-1024*1024*512)) #sum_mem-512MB = temporary memory limit of all processes
      default_mem=0

      if [[ $max_mem -gt $mem_limit ]]; then
      $_path/rac server --cluster=$_cluster $host update --server=$_server --temporary-allowed-total-memory=$sum_mem_limit
      echo set mem = $sum_mem_limit >> $logfile
      echo waiting 20 sec. >> $logfile
      sleep 20
      $_path/rac server --cluster=$_cluster $host update --server=$_server --temporary-allowed-total-memory=$default_mem
      echo set mem = $default_mem >> $logfile
      fi
      echo "finish"

      УдалитьРППоПамяти.ps1

      Скрипт для PowerShell:

      $WorkBaseServer = "srv-1c:1540"

      $Connector = new-object -comobject "V83.COMConnector"
      $AgentConnection = $Connector.ConnectAgent($WorkBaseServer)
      $Clusters = $AgentConnection.GetClusters()
      $Cluster = $Clusters.GetValue(0)
      $AgentConnection.Authenticate($Cluster,"","")

      $WorkingProcesses = $AgentConnection.GetWorkingProcesses($Cluster)
      $WorkingServers = $AgentConnection.GetWorkingServers($Cluster)
      $mem = 0
      $mem_max = 0
      ForEach ($wp In $WorkingProcesses)
      $mem = $mem + $wp.MemorySize
      if ($wp.IsEnable)
      if ($wp.MemorySize -gt $mem_max)
      >
      >

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

      Вместо заключения

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *