Перейти к основному содержанию

1C — очищаем оперативную память по расписанию

1C

1C сервер не хочет очищать за собой оперативную память. Автоматизируем процесс очистки.

Господин Wen Jia по фамилии Liu из Сиднея нам сильно помог, написав консольную утилиту EmptyStandbyList.exe, которую мы используем для автоматизации процесса ежедневной очистки оперативной памяти. Утилита работает в ОС Windows Vista и выше. Я проверял на Windows Server 2012 R2.

Утилита может очищать:

  • process working sets
  • the modified page list
  • the standby lists (priorities 0 to 7)
  • the priority 0 standby list only

Использование:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist

Скачиваем EmptyStandbyList.exe:

https://wj32.org/wp/software/empty-standby-list/

Или у меня: EmptyStandbyList.exe

Сохраняем утилиту в папку, я сохраняю по адресу:

C:\RAM\EmptyStandbyList.exe

Пишем батник emptylist.bat:

echo off
cd C:\RAM
EmptyStandbyList.exe workingsets
EmptyStandbyList.exe standbylist
exit

Сохраняем батник по адресу:

C:\RAM\emptylist.bat

ram

Если запустить батник под администратором, то память очистится:

ram

У меня эффект очистки слабо виден, но когда 1С забивает всю память, то ступенька круче.

Теперь создаём в Планировщике (Task Scheduler) новую задачу, которая каждый день в 7 утра будет запускать наш батник от имени локального администратора сервера.

ram

Код от Сергея Дмитриевича

Дополнение от читателей.

У меня вот такой код, автоматически запускает от имени админа и скачивает EmptyStandbyList.exe в случае отсутствия.

Так же можно удалить код запуска от имени администратора и сконвертировать в exe через Advanced Bat Converter с галочками запуска от имени админа и режима "невидимости".

Меняем по своему вкусу как надо, кодировка 866.

@echo off
cd /D "%~dp0"
cls
title Автоочистка кэша ОЗУ
:: Проверка наличия прав Администратора (во избежания перезапуска bat если уже есть права Админа)
WHOAMI /PRIV | find /i "SeRemoteShutdownPrivilege" > nul
if %ERRORLEVEL% == 0 goto admin
::для работы с папкой appdata права админа не требуются
set script_patch=%appdata%\Colvor's_code\temp
md %script_patch%
cls
:: Создаём vbs скрипт для выдачи прав Администратора bat файлу
ver |>NUL find /v "5." && if "%~1"=="" (
Echo CreateObject^("Shell.Application"^).ShellExecute WScript.Arguments^(0^),"1","","runas",1 >"%script_patch%\Elevating.vbs"
cscript.exe //nologo "%script_patch%\Elevating.vbs" "%~f0"& goto :eof
)
del /Q "%script_patch%\Elevating.vbs"
cls
:: Повторная проверка выдачи прав Администратора
WHOAMI /PRIV | find /i "SeRemoteShutdownPrivilege" > nul
if %ERRORLEVEL% == 0 goto admin
color 0c
echo Нет прав администратора.
pause
exit
:admin
:check
dir /B |find "EmptyStandbyList.exe"||(
echo Ошибка, нужжная програма не найдена, пробуем скачать.
echo Проверка наличия инетернета
ping google.com|find /I "TTL="||echo Ошибка, нет подключения к интернету && timeout /t 5 && exit
echo Скачиваем нужную программу
powershell Invoke-WebRequest -URI "'https://web.archive.org/web/20220626170945if_/https://wj32.org/wp/download/1455/'" -outfile "'EmptyStandbyList.exe'"
timeout /t 5
)
:st_m
cls
timeout /t 10 /nobreak
EmptyStandbyList
goto st_m

Теги

 

Похожие материалы

Windows — определить каким процессом занят порт

Определяем каким процессом занят порт. Делать это будем на Windows Server 2012 R2, но инструкция подходит и для других версий Windows. Для начала определим PID процесса

Теги