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
Если запустить батник под администратором, то память очистится:
У меня эффект очистки слабо виден, но когда 1С забивает всю память, то ступенька круче.
Теперь создаём в Планировщике (Task Scheduler) новую задачу, которая каждый день в 7 утра будет запускать наш батник от имени локального администратора сервера.
Код от Сергея Дмитриевича
Дополнение от читателей.
У меня вот такой код, автоматически запускает от имени админа и скачивает 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