Автоматический перезапуск службы 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 по расписанию

См. также

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

В рамках мастер-класса мы запустим нагрузочный тест на 3К пользователей и посмотрим, как будет вести себя PostgreSQL при такой нагрузке.

11.12.2024    1263    Tantor    1    

6

Администрирование СУБД Системный администратор Программист

В крупных компаниях, где много типовых и сильно доработанных баз с режимом работы 24/7, переход с MS SQL на PostgreSQL затягивается. Получается гетерогенная структура – когда прод уже на PostgreSQL, а разработка и тестирование – пока на MS SQL. О том, какие варианты помогут постепенно перевести прод с несколькими базами MS SQL на PostgreSQL, не сломав среду тестирования и разработки, пойдет речь в статье.

21.11.2024    3557    a.doroshkevich    8    

15

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

Мы исследуем проблему долгого выполнения запросов PostgreSQL при использовании конструкции VALUES: когда она возникает, как на нее можно повлиять, а главное, почему ее продуманная отработка важна для более быстрого функционирования решений на базе 1С

12.11.2024    1363    Tantor    20    

17

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

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

31.10.2024    10006    a.doroshkevich    21    

71

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

Отдельный сервер лицензирования упрощает администрирование лицензий в сложных структурах с несколькими кластерами и тысячами пользователей. Расскажем о том, как настроить резервирование лицензий для крупной компании с высокими требованиями к доступности SLA 99.98% и автоматизировать переактивацию лицензий в случае возможных сбоев.

29.10.2024    2703    jul.dolganova    8    

17

HighLoad оптимизация Администрирование СУБД Механизмы платформы 1С Программист Платформа 1С v8.3 ИТ-компания Россия Бесплатно (free)

В данной статье мы рассмотрим, как работает механизм временных таблиц на postgres на платформе 8.3.23 и что изменилось в нем при добавлении новых возможностей в платформе 8.3.25. А также на примере покажу, как понимание работы платформы позволяет оптимизировать СУБД для работы с 1С.

29.10.2024    4458    Tantor    38    

37

Облачные сервисы, хостинг Linux Сервера Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Одна из завершающих публикаций цикла "В облако на работу:.. Рецепты от Капитана", в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием и прочая, прочая... На закуску разбираемся с отказоустойчивостью. В этой публикации для серверов 1С заодно попробуем подобно сериалу «Разрушители легенд» подтвердить или опровергнуть пару устойчивых мифов о требованиях назначения функциональности.

18.10.2024    2220    capitan    5    

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

А ведь найдутся такие, которые именно так и сделают и скопипастят, только про pause в конце даже и не задумаются…
4. mefalcon 36 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 36 24.07.24 15:35 Сейчас в теме
(2)
restart-service
как освобожусь еще допишу чистку кэша сеансов, тогда рестарт не подойдет. ))
5. redfred 24.07.24 15:55 Сейчас в теме
(3)
как освобожусь еще допишу чистку кэша сеансов, тогда рестарт не подойдет. ))

stop-service ; очистка кэша ; start-service. Ихмо более компактно и читаемо. Хотя это уже дело вкуса
6. mefalcon 36 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 36 02.08.24 14:18 Сейчас в теме
(7) Доброго дня, переписал на ps.
Все же stop-service выполняется асинхронно, не ожидает пока завершатся процессы службы, поэтому вставил цикл проверки остановки процессов:)
11. Armando 1402 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 36 26.07.24 08:47 Сейчас в теме
(8)
то рпхосты не завершились и это приводит к необъяснимым проблемам в перезапущенном класте

Вы правы, спасибо!)
10. Garilia 68 25.07.24 21:09 Сейчас в теме
В моей практике бест практисом является просто ребут службы и отдельный ps скрипт на мягкий ребут рпхостов с переездом соединений. Снос сеансовых на постоянной основе нужен если динамику постоянно катаете, либо расширениями нещадно балуетесь
mefalcon; +1 Ответить
14. mefalcon 36 07.08.24 09:22 Сейчас в теме
(10) Доброе утро. Подскажи, пожалуйста, что имеешь в виду под "мягким ребутом"? изменяешь параметры кластера динамически (программно) или как-то иначе?
15. Garilia 68 09.09.24 15:21 Сейчас в теме
UPdate
(14) скрипт во вложении, можно запускать планировщиком по определенному расписанию
Прикрепленные файлы:
RebootRphosts 8.3.21.ps1
mefalcon; +1 Ответить
16. Xershi 1557 21.09.24 11:35 Сейчас в теме
Так, а чем штатный механизм перезапуска не устраивает?
Чистка кеша на сервере это последнее дело, если не качественно делают обновления.
И для чего регламент в случае сбоя стопается сервер и чистится руками(бантиком).
Или во время внедрения настолько кривые обновы ставят, что админы устали обслуживание руками запускать?
17. mefalcon 36 28.11.24 09:22 Сейчас в теме
(16) добрый день.
Особенностью инфраструктуры заказчика, сложившейся исторически. По ночам периодически скачки электроэнергии, например
Оставьте свое сообщение