Автоматический перезапуск службы 1С на сервере Windows с очисткой кэша сеансов

15.08.24

База данных - Администрирование СУБД

Доброго дня, коллеги. Рубрика - администрирование серверов 1С: Предприятие.

Как известно, многие внедрения на платформе 1С Предприятие проходят тестирование лишь формально, а именно:

нагрузочное тестирование 
(подробно описывать не буду, т.к. об этом есть отдельная статья про интегральную оценку производительности по методике APDEX  Оценка интегральной производительности системы по методике APDEX :: Методики :: Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8 (1c.ru))

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

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

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

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

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

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

Все это время надо как-то "жить".

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

Решение с настройкой кластера не всегда подходит: настройка позволяет

-перезапускать рабочие процессы по таймеру или

-по превышению заданного объема оперативной памяти.

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

Второе не решает проблему завершения именно "проблемных" рабочих процессов, поскольку не обязательно увеличившийся объем занимаемой ОЗУ у процесса означает неоптимальность кода, который в нем выполняется: возможно такой объем вполне допустим исходя из бизнес-логики приложения, например при массовом проведении каких-то документов по регламенту который заведен в компании.

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

 
 

 C:\Program Files\1cv8\8.3.22.2283\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug

 

Для сервера, запущенного с параметром -regport 1541 каталог сеансовых данных будет в размещен в каталоге "reg_1541" и начинаться с "snccntx" , в общем виде так: 

 
 

 

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

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

Рабочей средой службы сервиса 1С может быть как Windows так и Linux. В обоих случаях нет средств перезапуска служб по таймеру "из коробки", а тем более с чисткой кэша сеансов.

-Для Windows решением может быть cmd или powershell скрипт и встроенный в ОС планировщик задач taskschd.msc, настроенный на выполнение данного скрипта.

-Для Linux - bash скрипт и встроенная в ОС служба cron - некий аналог планировщика в Windows.

Вариант для Linux я опишу как-нибудь в другой раз, уж извините.

Рассмотрим вариант для Windows и реализуем задачу средствами команд powershell, но сначала о том почему данный скрипт пришлось писать:

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

Сам скрипт:
 

 
 

 

'1C:Enterprise 8.3 Server Agent (x86-64)' - Это имя службы, как оно задано в ветке редактора реестра:

Клавиша Win+R: набираем команду regidit, откроется редактор реестра. Имя службы, это имя "папки" в ветке (выделено жирным):

 
 

 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (x86-64)

 

Или в консоли служб 

Клавиша Win+R: services.msc. Находим службу в списке, открываем ее карточку, имя, это значение напротив "Service Name" ("Имя службы" в русском интерфейсе)

.

  • Как сохранить скрипт

Для того чтобы этот скрипт запустить, необходимо сохранить его в текстовый файл и дать файлу расширение ps1, размещаем этот файл в каталог, который доступен пользователю из-под которого он будет запускаться, например, каталог %appdata%.

  • Как настроить планировщик

Планировщик задач можно открыть так:

Клавиша Win+R: taskschd.msc

Переходим в папку Microsoft, правой кнопкой мыши - "создать простую задачу".

Заполняем понятное для себя наименование, отражающее сущность выполняемой операции, например restart1cserviceClearCache, описание заполнять не обязательно, но, поскольку сервер могут обсуживать другие люди после Вас, можете написать что-то , вроде "перезапуск службы 1с по расписанию". Поверьте, коллеги вспомнят о Вас потом добрым словом за понятное представление задачи:).

Указываем время и периодичность выполнения на ваше усмотрение. 

Действие (Action) - "Запустить программу" (Start a program)

В поле "Программа или сценарий" (Program/script) указываем программу powershell (у меня путь такой: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe),

в качестве параметра ( поле "Добавить аргументы(необязательно)") указываем через ключ -File путь к файлу со скриптом: -File "%appdata%\restart1cserviceClearCache.ps1".

 

Нажимаем "ОК".

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

  • Как проверить работоспособность задания планировщика

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

Для проверки работоспособности, откройте каталог сеансовых данных проводником, чтобы были видны даты создания файлов в нем "C:\Program Files\1cv8\srvinfo\reg_1541\snccntx* и редактор powershell

В редакторе powershell наберите команду (*)

 
 

 

Результатом этой команды является табличка с датой старта процессов службы 1С, например

 
 

 

Редактор не закрывайте.

В планировщике задач установить курсор на созданном Вами задании, правой кнопкой мыши -> Выполнить (Run)

После выполнения перейдите в редактор powershell и повторите команду (*) еще раз. Если вы видите новые значения StartTime для процессов, значит перезапуск выполнен успешно, осталось проверить очистился ли кэш. Смотрим на даты создания файлов в каталоге "C:\Program Files\1cv8\srvinfo\reg_1541\snccntx*. Если они соответствуют новым значениям StartTime, то скрипт отработал успешно.

На этом все, спасибо за внимание :)

///////////////

ПС:

ранее скрипт писал для cmd, оставлю его для истории:

 
 

 echo off
sc stop "1C:Enterprise 8.3 Server Agent (x86-64)" 
ping -n 1 -w 3000 10.10.254.254 >nul
:gettasklist
tasklist /fi "imagename eq rmngr.exe">"%appdata%\log.txt"
ping -n 1 -w 1000 10.10.254.254 >nul
set findoutput=""
set /p findoutput=<%appdata%\log.txt
echo "Awaiting for rmngr.exe stopping..." !
if not "%findoutput%"=="Информация: Задачи, отвечающие заданным критериям, отсутствуют." goto gettasklist
sc start "1C:Enterprise 8.3 Server Agent (x86-64)"
pause

 

перезапуск сервера 1с по расписанию перезапуск службы 1с 8.3 по расписанию

См. также

Администрирование СУБД Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

В статье описала свой опыт аудита 1С базы, порядок действий + статьи, которые сильно помогли в работе.

14.07.2024    7232    limonen    16    

19

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

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

14.06.2024    2566    user1389975    13    

34

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

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

24.05.2024    2384    Kernelbug    9    

20

Администрирование СУБД Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

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

23.05.2024    8909    human_new    18    

56

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

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

1 стартмани

15.05.2024    1196    18    MaximSh    0    

6

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

Статья для тех, кто столкнулся с необходимостью пересчета итогов для "больших таблиц" и нет возможности поставить на паузу ИБ для проведения работ.

25.04.2024    3123    virustam    33    

12
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. jmw 61 24.07.24 09:00 Сейчас в теме
Собственно, этот скрипт оборачиваем в bat файл,

А ведь найдутся такие, которые именно так и сделают и скопипастят, только про pause в конце даже и не задумаются…
4. mefalcon 35 24.07.24 15:41 Сейчас в теме
(1)
(1) Как говорил Винни Пух, "это ЖЖЖ тут не с проста."
Так и здесь pause для отображения результата для первичного использования, когда юзер(админ) поймет, что ему мешает это окно, уже пусть задумывается о pause и так далее. =))
2. redfred 24.07.24 14:15 Сейчас в теме
А банальный повершельный restart-service -displayname "1C:Enterprise 8.3 Server Agent (x86-64)" -force не тоже самое сделает?
3. mefalcon 35 24.07.24 15:35 Сейчас в теме
(2)
restart-service
как освобожусь еще допишу чистку кэша сеансов, тогда рестарт не подойдет. ))
5. redfred 24.07.24 15:55 Сейчас в теме
(3)
как освобожусь еще допишу чистку кэша сеансов, тогда рестарт не подойдет. ))

stop-service ; очистка кэша ; start-service. Ихмо более компактно и читаемо. Хотя это уже дело вкуса
6. mefalcon 35 24.07.24 19:14 Сейчас в теме
(5) Да, Вы правы, читаемо.
Не знаете , stop-service - выполняется синхронно? т.е. дожидается остановки всех процессов службы?
sc stop и net stop асинхронны. т.е. команду ОС службе отправляет, и дальше следующие команды шарашит))
А мне надо, чтобы сначала остановились все процессы службы, причем штатно, желательно без kill, а потом выполнялись либо запуск, либо чистка кэша. Кстати, чистка кэша , пока процессы не оставнолены , невозможна. Поэтому получается так "нелаконично" =)
7. redfred 24.07.24 21:20 Сейчас в теме
(6)
Не знаете , stop-service - выполняется синхронно? т.е. дожидается остановки всех процессов службы?


Да, синхронно
mefalcon; +1 Ответить
13. mefalcon 35 02.08.24 14:18 Сейчас в теме
(7) Доброго дня, переписал на ps.
Все же stop-service выполняется асинхронно, не ожидает пока завершатся процессы службы, поэтому вставил цикл проверки остановки процессов:)
11. Armando 1400 26.07.24 08:22 Сейчас в теме
(6)
А мне надо, чтобы сначала остановились все процессы службы, причем штатно, желательно без kill

Зачем? Даже 1С в своей методичке приводит пример скрипта для рестарта с принудительным завершением процессов через taskkill
https://its.1c.ru/db/metod8dev#content:5899:hdoc:%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20%D1%81%D0%BA%D1­%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2
mefalcon; +1 Ответить
8. Cyberhawk 135 25.07.24 11:39 Сейчас в теме
отключился ли процесс оперционной системы "rmngr.exe". Именно это событие принял как за успешное завершение остановки службы 1С
Лучше ориентироваться на завершение всех трех видов процессов кластера - менеджер, агент, рпхост.
Можно еще и dbgs туда добавить.
А то бывает что рпхосты не завершились и это приводит к необъяснимым проблемам в перезапущенном кластере.
mefalcon; +1 Ответить
9. paulwist 25.07.24 12:52 Сейчас в теме
(8)
Можно еще и dbgs туда добавить.


Ну тогда ещё dbda для полного комплекта :)
12. mefalcon 35 26.07.24 08:47 Сейчас в теме
(8)
то рпхосты не завершились и это приводит к необъяснимым проблемам в перезапущенном класте

Вы правы, спасибо!)
10. Garilia 64 25.07.24 21:09 Сейчас в теме
В моей практике бест практисом является просто ребут службы и отдельный ps скрипт на мягкий ребут рпхостов с переездом соединений. Снос сеансовых на постоянной основе нужен если динамику постоянно катаете, либо расширениями нещадно балуетесь
mefalcon; +1 Ответить
14. mefalcon 35 07.08.24 09:22 Сейчас в теме
(10) Доброе утро. Подскажи, пожалуйста, что имеешь в виду под "мягким ребутом"? изменяешь параметры кластера динамически (программно) или как-то иначе?
Оставьте свое сообщение