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

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

Скрипт первый:

set LOG_FILE="scripts.log"
set SERVICE_1C_NAME="1C:Enterprise 8.3 Server Agent (x86-64)"
set SERVICE_RAS_NAME="1C:Enterprise 8.3 Remote Server"
set CNTX_PATH="C:\Program Files\1cv8\srvinfo\reg_1541"
set PFL_PATH="C:\ProgramData\1C\1cv8"
set TEMP_PATH="C:\Temp"

echo stop %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
sc stop %SERVICE_1C_NAME%
sc stop %SERVICE_RAS_NAME%
timeout 10

taskkill /f /im "rphost.exe"
taskkill /f /im "rmngr.exe"
taskkill /f /im "ragent.exe"
taskkill /f /im "ras.exe"
timeout 10

echo done stop %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
echo clean temp %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
DEL /Q /F /S %CNTX_PATH%\snccntx*
rem DEL /Q /F %PFL_PATH%\*.pfl
DEL /Q /F /S %TEMP_PATH%\*.*
echo done clean temp %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
echo start %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%

sc start %SERVICE_1C_NAME%
sc start %SERVICE_ RAS _NAME%

echo Service %SERVICE_1C_NAME% restarted at %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE% 

Закачать скрипт с сайта

Скрипт второй:

@echo off
SetLocal EnableDelayedExpansion
set LOG_FILE="scripts.log"
set SERVICE_1C_NAME="1C:Enterprise 8.3 Server Agent (x86-64)"
set SERVICE_RAS_NAME="1C:Enterprise 8.3 Remote Server"
set CNTX_PATH="C:\Program Files\1cv8\srvinfo\reg_1541"
set PFL_PATH="C:\ProgramData\1C\1cv8"
set TEMP_PATH="C:\Temp"



rem Время расчета в секундах
set t=30

rem Предел загрузки процессора
set maxcpu=80

:check
   set procent=0
   set i=0
   set j=0
   set nol=0
   for /f "skip=2 tokens=2 delims=," %%c in ('typeperf "\238(_Total)\6" -sc !t!') do (
    set cpu_usage=%%~c
    set j=!cpu_usage:~0,-7!
    if !j! GEQ !nol! (
                                set /a procent=!procent!+!cpu_usage:~0,-7!
                                set /a i=!i!+1
                                )
    )
set /a proctime=!procent!/!i!

echo !proctime!
rem echo !i!

if !proctime! GEQ %maxcpu% (call :restart1c)

goto :check


:restart1c
echo stop %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
sc stop %SERVICE_1C_NAME%
sc stop %SERVICE_RAS_NAME%
timeout 10
taskkill /f /im "rphost.exe"
taskkill /f /im "rmngr.exe"
taskkill /f /im "ragent.exe"
taskkill /f /im "ras.exe"
timeout 10
echo done stop %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
echo clean temp %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
DEL /Q /F /S %CNTX_PATH%\snccntx*
rem DEL /Q /F %PFL_PATH%\*.pfl
DEL /Q /F /S %TEMP_PATH%\*.*
echo done clean temp %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
echo start %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
sc start %SERVICE_1C_NAME%
sc start %SERVICE_ RAS _NAME%
echo Service %SERVICE_1C_NAME% restarted at %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE% 

exit /b

Закачать скрипт с сайта

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

@echo off
SetLocal EnableDelayedExpansion
set ver1c="0"
FOR /f %%a IN ('dir /b /o:n /ad "C:\Program Files\1cv8"') DO (
       echo %%a|>nul find "8."&& set ver1c=%%a
)

set CtrlPort=1540
set AgentName=localhost
set RASPort=1545
set SrvcName="1C:Enterprise 8.3 Remote Server"
set BinPath="\"C:\Program Files\1cv8\!ver1c!\bin\ras.exe\" cluster --service --port=%RASPort% %AgentName%:%CtrlPort%"
set Desctiption="1C:Enterprise 8.3 Remote Server"

set BinPath="C:\Program Files\1cv8\!ver1c!\bin"
set cluster="0"
cd %BinPath%
for /F "tokens=* delims=" %%i in ('rac.exe cluster list') do (
 echo %%i|>nul find "cluster"&& set b=%%i
)
for %%a in (!b!) do set cluster=%%a

echo !cluster!

rem Теперь непосредственно производим мягкую перезагрузку rphost сервера 1С
rac.exe cluster update --cluster=!cluster! --lifetime-limit 60
timeout /t 90 /nobreak
rac.exe cluster update --cluster=!cluster! --lifetime-limit 0

Закачать готовый скрипт.