Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Здравствуйте, проблемма такая, запускаю шаблон в работу.Например 20-30 потоков, нагрузка на сервер нормальная 70-80 %, а памяти вообще до 50 % используется. Но через некоторое время шаблон перестает нормально работать.
ВОт такая хрень на процессе, хотя потоков количество не менялось, а сам процесс силпно тормозит, так что приходится ждать 2-5 минуты что бы перезагрузить зенку.
После перезагрузки все нормально какое то время, а потом опять жопа!(((( Версия зенки были разные, и сейчас последня.
Настройки как и на других серверах (где другие шаблоны работают нормально), да и сервера такие же.
Сам шаблон довольно обычный, фарм профилей можно сказать, браузер cromium .
При работе в веб постоянно пожирает память. Как с этим бороться даже разработчики не знают.
Либо перезапускай зенку по заданию, либо, переписывай шаблоны на запросы где это возможно.
При работе в веб постоянно пожирает память. Как с этим бороться даже разработчики не знают.
Либо перезапускай зенку по заданию, либо, переписывай шаблоны на запросы где это возможно.
то не серьездно даже как то.
ПОхожие шаблоны мои работают стабильно, на том же сервере, и ничего не жрет. Тут дело в том что сама производительность с каздхум часом стремиться к 0
Сворганил для себя костыль, и он работает. Это еще не окончательный вариант, каждый может подкрутить под себя.
Пинцип работы:
- проверяет, запущена ли зенка или нет
- если не запущена, запускает
- если запущена - проверяет сколько забито памяти
- если превышен предел - убивает процесс
- ждет 30 секунд (тут есть лаги)
- запускает версию зенки указанную в FORCE_VERSION
добавляете в планировщик, выполнение раз в 10 минут
Bash:
@echo off
setlocal enabledelayedexpansion
chcp 1251 > nul
rem Фиксированный путь к ZennoPoster
set "ZP_BASE=C:\Program Files\ZennoLab\RU\ZennoPoster Pro V7"
rem Порог использования памяти в процентах
set "MEMORY_THRESHOLD=83"
rem Указать конкретную версию для запуска (например: 7.8.6.0) или оставить пустым для последней версии
set "FORCE_VERSION=7.8.6.0"
rem Путь к лог-файлу
set "LOG_FILE=%~dp0zennoposter_log.txt"
rem Запись в лог о начале работы
call :log "=========================================="
call :log "Запуск скрипта start_zennoposter.bat"
call :log "=========================================="
rem Проверяем, запущен ли уже ZennoPoster
call :log "Проверка запущен ли процесс ZennoPoster.exe..."
tasklist | find /i "ZennoPoster.exe" > nul
if errorlevel 1 (
call :log "Процесс ZennoPoster.exe не обнаружен"
echo ZennoPoster не запущен. Запускаем...
call :start_zennoposter
echo.
echo ZennoPoster успешно запущен!
call :log "ZennoPoster успешно запущен"
goto :end_script
)
rem ZennoPoster запущен - проверяем память
call :log "Процесс ZennoPoster.exe запущен"
echo ZennoPoster уже запущен.
echo.
echo Проверка текущего состояния памяти...
call :log "Начало проверки использования памяти..."
call :check_memory
if !errorlevel! equ 1 (
call :log "ВНИМАНИЕ! Использование памяти превысило порог !MEMORY_THRESHOLD!%%"
echo.
echo ВНИМАНИЕ! Использование памяти превысило порог !MEMORY_THRESHOLD!%%
echo Выполняется перезапуск ZennoPoster...
echo.
rem Завершаем процесс
echo Завершение процесса ZennoPoster...
call :log "Завершение процесса ZennoPoster.exe..."
taskkill /F /IM "ZennoPoster.exe" > nul 2>&1
call :log "Процесс ZennoPoster.exe завершён"
rem Ждем 30 секунд
echo Ожидание 30 секунд перед перезапуском...
call :log "Ожидание 30 секунд перед перезапуском..."
ping 127.0.0.1 -n 31 > nul
call :log "Ожидание завершено"
rem Запускаем снова
echo.
echo Перезапуск ZennoPoster...
call :log "Начало перезапуска ZennoPoster..."
call :start_zennoposter
echo.
echo Перезапуск завершён!
call :log "Перезапуск ZennoPoster завершён успешно"
) else (
call :log "Использование памяти в норме (не превышает порог !MEMORY_THRESHOLD!%%)"
echo.
echo Память в норме.
)
goto :end_script
rem ============================================
rem Функция запуска ZennoPoster
rem ============================================
:start_zennoposter
call :log "Функция :start_zennoposter - начало выполнения"
echo Проверка пути: "!ZP_BASE!"
call :log "Проверка базового пути: !ZP_BASE!"
if not exist "!ZP_BASE!" (
call :log "ОШИБКА: Путь не найден: !ZP_BASE!"
echo Путь не найден: "!ZP_BASE!"
goto :eof
)
call :log "Базовый путь существует"
rem Если указана конкретная версия
if defined FORCE_VERSION (
call :log "Используется принудительная версия: !FORCE_VERSION!"
set "zp_path=!ZP_BASE!\!FORCE_VERSION!\Progs\ZennoPoster.exe"
if exist "!zp_path!" (
call :log "Файл найден: !zp_path!"
echo Использование указанной версии: !FORCE_VERSION!
echo Запуск: "!zp_path!"
call :log "Запуск ZennoPoster версии !FORCE_VERSION!"
start "" "!zp_path!"
call :log "Команда запуска выполнена успешно"
goto :eof
) else (
call :log "ОШИБКА: Указанная версия !FORCE_VERSION! не найдена по пути: !zp_path!"
echo ОШИБКА: Указанная версия !FORCE_VERSION! не найдена!
echo Путь не существует: "!zp_path!"
goto :eof
)
)
rem Если версия не указана - ищем последнюю
call :log "Версия не указана, выполняется поиск последней версии"
echo Сканирование версий в папке: "!ZP_BASE!"
rem Временный файл для сохранения путей версий
set "temp_file=%TEMP%\zp_versions.txt"
if exist "!temp_file!" del "!temp_file!"
call :log "Создан временный файл для списка версий: !temp_file!"
rem Собираем все пути к версиям
call :log "Начало сканирования доступных версий..."
for /F "delims=" %%d in ('dir /B /AD "!ZP_BASE!\*.*.*.*" 2^>nul') do (
if exist "!ZP_BASE!\%%d\Progs\ZennoPoster.exe" (
call :log "Найдена версия: %%d"
echo %%d>>"!temp_file!"
)
)
if not exist "!temp_file!" (
call :log "ОШИБКА: Не найдены доступные версии ZennoPoster"
echo Не найдены доступные версии ZennoPoster.
goto :eof
)
rem Находим самую свежую версию
call :log "Начало поиска самой новой версии..."
set "highest_ver=0.0.0.0"
set "zp_path="
for /F "delims=" %%v in (!temp_file!) do (
call :compare_version "%%v" "!highest_ver!"
if !errorlevel! gtr 0 (
set "highest_ver=%%v"
set "zp_path=!ZP_BASE!\%%v\Progs\ZennoPoster.exe"
call :log "Обновлена кандидатская версия: %%v"
)
)
if defined zp_path (
call :log "Определена самая новая версия: !highest_ver!"
call :log "Путь к исполняемому файлу: !zp_path!"
echo Найдена самая новая версия: !highest_ver!
echo Запуск: "!zp_path!"
call :log "Запуск ZennoPoster версии !highest_ver!"
start "" "!zp_path!"
call :log "Команда запуска выполнена успешно"
) else (
call :log "ОШИБКА: Не удалось найти исполняемый файл ZennoPoster"
echo Не удалось найти исполняемый файл ZennoPoster.
)
rem Удаляем временный файл
if exist "!temp_file!" del "!temp_file!"
call :log "Временный файл удалён"
call :log "Функция :start_zennoposter - завершение выполнения"
goto :eof
rem ============================================
rem Функция проверки памяти
rem ============================================
:check_memory
call :log "Функция :check_memory - начало выполнения"
rem Получаем общий объем оперативной памяти и свободную память
call :log "Получение информации об объеме памяти через WMIC..."
for /f "skip=1 tokens=2 delims==" %%a in ('wmic OS get TotalVisibleMemorySize /value') do (
set "total_mem_raw=%%a"
set "total_mem_raw=!total_mem_raw: =!"
if defined total_mem_raw set /a total_mem=!total_mem_raw!
)
for /f "skip=1 tokens=2 delims==" %%a in ('wmic OS get FreePhysicalMemory /value') do (
set "free_mem_raw=%%a"
set "free_mem_raw=!free_mem_raw: =!"
if defined free_mem_raw set /a free_mem=!free_mem_raw!
)
call :log "Получено: total_mem=!total_mem! KB, free_mem=!free_mem! KB"
rem Проверяем корректность полученных данных
if not defined total_mem (
call :log "ОШИБКА: не удалось получить общий объем памяти"
echo Ошибка: не удалось получить общий объем памяти
exit /b 0
)
if not defined free_mem (
call :log "ОШИБКА: не удалось получить объем свободной памяти"
echo Ошибка: не удалось получить объем свободной памяти
exit /b 0
)
if !total_mem! lss 1 (
call :log "ОШИБКА: некорректное значение общей памяти"
echo Ошибка: некорректное значение общей памяти
exit /b 0
)
call :log "Данные корректны, начало расчётов..."
rem Вычисляем использованную память
set /a used_mem=total_mem-free_mem
rem Переводим в МБ для избежания переполнения при вычислении процента
set /a total_mem_mb=total_mem/1024
set /a used_mem_mb=used_mem/1024
call :log "Конвертация в MB: total=!total_mem_mb! MB, used=!used_mem_mb! MB"
rem Вычисляем процент использования памяти
set /a mem_usage=(used_mem_mb*100)/total_mem_mb
call :log "Рассчитан процент использования памяти: !mem_usage!%%"
echo Использование памяти: !mem_usage!%% (используется !used_mem_mb! MB из !total_mem_mb! MB)
call :log "Использование памяти: !mem_usage!%% (используется !used_mem_mb! MB из !total_mem_mb! MB)"
rem Проверяем, превышен ли порог
if !mem_usage! gtr !MEMORY_THRESHOLD! (
call :log "Порог !MEMORY_THRESHOLD!%% ПРЕВЫШЕН (текущее: !mem_usage!%%)"
call :log "Функция :check_memory - возврат кода 1 (превышение порога)"
exit /b 1
) else (
call :log "Порог !MEMORY_THRESHOLD!%% НЕ превышен (текущее: !mem_usage!%%)"
call :log "Функция :check_memory - возврат кода 0 (норма)"
exit /b 0
)
rem ============================================
rem Функция сравнения версий
rem ============================================
:compare_version
setlocal EnableDelayedExpansion
set "ver1=%~1"
set "ver2=%~2"
for /F "tokens=1-4 delims=." %%a in ("!ver1!") do (
set /a v1=%%a, v2=%%b, v3=%%c, v4=%%d
)
for /F "tokens=1-4 delims=." %%a in ("!ver2!") do (
set /a w1=%%a, w2=%%b, w3=%%c, w4=%%d
)
if !v1! gtr !w1! exit /b 1
if !v1! lss !w1! exit /b -1
if !v2! gtr !w2! exit /b 1
if !v2! lss !w2! exit /b -1
if !v3! gtr !w3! exit /b 1
if !v3! lss !w3! exit /b -1
if !v4! gtr !w4! exit /b 1
if !v4! lss !w4! exit /b -1
exit /b 0
:end_script
call :log "Завершение работы скрипта"
call :log "=========================================="
call :log ""
echo.
echo Окно закроется через 5 секунд...
timeout /t 5 /nobreak > nul
endlocal
exit /b
rem ============================================
rem Функция логирования
rem ============================================
:log
setlocal enabledelayedexpansion
set "message=%~1"
rem Получаем текущую дату и время
for /f "tokens=1-4 delims=/ " %%a in ('date /t') do (
set "log_date=%%a.%%b.%%c"
)
for /f "tokens=1-2 delims=: " %%a in ('time /t') do (
set "log_time=%%a:%%b"
)
rem Записываем в лог-файл
echo [%log_date% %log_time%] %message% >> "%LOG_FILE%"
endlocal
goto :eof
Сворганил для себя костыль, и он работает. Это еще не окончательный вариант, каждый может подкрутить под себя.
Пинцип работы:
- проверяет, запущена ли зенка или нет
- если не запущена, запускает
- если запущена - проверяет сколько забито памяти
- если превышен предел - убивает процесс
- ждет 30 секунд (тут есть лаги)
- запускает версию зенки указанную в FORCE_VERSION
добавляете в планировщик, выполнение раз в 10 минут
Bash:
@echo off
setlocal enabledelayedexpansion
chcp 1251 > nul
rem Фиксированный путь к ZennoPoster
set "ZP_BASE=C:\Program Files\ZennoLab\RU\ZennoPoster Pro V7"
rem Порог использования памяти в процентах
set "MEMORY_THRESHOLD=83"
rem Указать конкретную версию для запуска (например: 7.8.6.0) или оставить пустым для последней версии
set "FORCE_VERSION=7.8.6.0"
rem Путь к лог-файлу
set "LOG_FILE=%~dp0zennoposter_log.txt"
rem Запись в лог о начале работы
call :log "=========================================="
call :log "Запуск скрипта start_zennoposter.bat"
call :log "=========================================="
rem Проверяем, запущен ли уже ZennoPoster
call :log "Проверка запущен ли процесс ZennoPoster.exe..."
tasklist | find /i "ZennoPoster.exe" > nul
if errorlevel 1 (
call :log "Процесс ZennoPoster.exe не обнаружен"
echo ZennoPoster не запущен. Запускаем...
call :start_zennoposter
echo.
echo ZennoPoster успешно запущен!
call :log "ZennoPoster успешно запущен"
goto :end_script
)
rem ZennoPoster запущен - проверяем память
call :log "Процесс ZennoPoster.exe запущен"
echo ZennoPoster уже запущен.
echo.
echo Проверка текущего состояния памяти...
call :log "Начало проверки использования памяти..."
call :check_memory
if !errorlevel! equ 1 (
call :log "ВНИМАНИЕ! Использование памяти превысило порог !MEMORY_THRESHOLD!%%"
echo.
echo ВНИМАНИЕ! Использование памяти превысило порог !MEMORY_THRESHOLD!%%
echo Выполняется перезапуск ZennoPoster...
echo.
rem Завершаем процесс
echo Завершение процесса ZennoPoster...
call :log "Завершение процесса ZennoPoster.exe..."
taskkill /F /IM "ZennoPoster.exe" > nul 2>&1
call :log "Процесс ZennoPoster.exe завершён"
rem Ждем 30 секунд
echo Ожидание 30 секунд перед перезапуском...
call :log "Ожидание 30 секунд перед перезапуском..."
ping 127.0.0.1 -n 31 > nul
call :log "Ожидание завершено"
rem Запускаем снова
echo.
echo Перезапуск ZennoPoster...
call :log "Начало перезапуска ZennoPoster..."
call :start_zennoposter
echo.
echo Перезапуск завершён!
call :log "Перезапуск ZennoPoster завершён успешно"
) else (
call :log "Использование памяти в норме (не превышает порог !MEMORY_THRESHOLD!%%)"
echo.
echo Память в норме.
)
goto :end_script
rem ============================================
rem Функция запуска ZennoPoster
rem ============================================
:start_zennoposter
call :log "Функция :start_zennoposter - начало выполнения"
echo Проверка пути: "!ZP_BASE!"
call :log "Проверка базового пути: !ZP_BASE!"
if not exist "!ZP_BASE!" (
call :log "ОШИБКА: Путь не найден: !ZP_BASE!"
echo Путь не найден: "!ZP_BASE!"
goto :eof
)
call :log "Базовый путь существует"
rem Если указана конкретная версия
if defined FORCE_VERSION (
call :log "Используется принудительная версия: !FORCE_VERSION!"
set "zp_path=!ZP_BASE!\!FORCE_VERSION!\Progs\ZennoPoster.exe"
if exist "!zp_path!" (
call :log "Файл найден: !zp_path!"
echo Использование указанной версии: !FORCE_VERSION!
echo Запуск: "!zp_path!"
call :log "Запуск ZennoPoster версии !FORCE_VERSION!"
start "" "!zp_path!"
call :log "Команда запуска выполнена успешно"
goto :eof
) else (
call :log "ОШИБКА: Указанная версия !FORCE_VERSION! не найдена по пути: !zp_path!"
echo ОШИБКА: Указанная версия !FORCE_VERSION! не найдена!
echo Путь не существует: "!zp_path!"
goto :eof
)
)
rem Если версия не указана - ищем последнюю
call :log "Версия не указана, выполняется поиск последней версии"
echo Сканирование версий в папке: "!ZP_BASE!"
rem Временный файл для сохранения путей версий
set "temp_file=%TEMP%\zp_versions.txt"
if exist "!temp_file!" del "!temp_file!"
call :log "Создан временный файл для списка версий: !temp_file!"
rem Собираем все пути к версиям
call :log "Начало сканирования доступных версий..."
for /F "delims=" %%d in ('dir /B /AD "!ZP_BASE!\*.*.*.*" 2^>nul') do (
if exist "!ZP_BASE!\%%d\Progs\ZennoPoster.exe" (
call :log "Найдена версия: %%d"
echo %%d>>"!temp_file!"
)
)
if not exist "!temp_file!" (
call :log "ОШИБКА: Не найдены доступные версии ZennoPoster"
echo Не найдены доступные версии ZennoPoster.
goto :eof
)
rem Находим самую свежую версию
call :log "Начало поиска самой новой версии..."
set "highest_ver=0.0.0.0"
set "zp_path="
for /F "delims=" %%v in (!temp_file!) do (
call :compare_version "%%v" "!highest_ver!"
if !errorlevel! gtr 0 (
set "highest_ver=%%v"
set "zp_path=!ZP_BASE!\%%v\Progs\ZennoPoster.exe"
call :log "Обновлена кандидатская версия: %%v"
)
)
if defined zp_path (
call :log "Определена самая новая версия: !highest_ver!"
call :log "Путь к исполняемому файлу: !zp_path!"
echo Найдена самая новая версия: !highest_ver!
echo Запуск: "!zp_path!"
call :log "Запуск ZennoPoster версии !highest_ver!"
start "" "!zp_path!"
call :log "Команда запуска выполнена успешно"
) else (
call :log "ОШИБКА: Не удалось найти исполняемый файл ZennoPoster"
echo Не удалось найти исполняемый файл ZennoPoster.
)
rem Удаляем временный файл
if exist "!temp_file!" del "!temp_file!"
call :log "Временный файл удалён"
call :log "Функция :start_zennoposter - завершение выполнения"
goto :eof
rem ============================================
rem Функция проверки памяти
rem ============================================
:check_memory
call :log "Функция :check_memory - начало выполнения"
rem Получаем общий объем оперативной памяти и свободную память
call :log "Получение информации об объеме памяти через WMIC..."
for /f "skip=1 tokens=2 delims==" %%a in ('wmic OS get TotalVisibleMemorySize /value') do (
set "total_mem_raw=%%a"
set "total_mem_raw=!total_mem_raw: =!"
if defined total_mem_raw set /a total_mem=!total_mem_raw!
)
for /f "skip=1 tokens=2 delims==" %%a in ('wmic OS get FreePhysicalMemory /value') do (
set "free_mem_raw=%%a"
set "free_mem_raw=!free_mem_raw: =!"
if defined free_mem_raw set /a free_mem=!free_mem_raw!
)
call :log "Получено: total_mem=!total_mem! KB, free_mem=!free_mem! KB"
rem Проверяем корректность полученных данных
if not defined total_mem (
call :log "ОШИБКА: не удалось получить общий объем памяти"
echo Ошибка: не удалось получить общий объем памяти
exit /b 0
)
if not defined free_mem (
call :log "ОШИБКА: не удалось получить объем свободной памяти"
echo Ошибка: не удалось получить объем свободной памяти
exit /b 0
)
if !total_mem! lss 1 (
call :log "ОШИБКА: некорректное значение общей памяти"
echo Ошибка: некорректное значение общей памяти
exit /b 0
)
call :log "Данные корректны, начало расчётов..."
rem Вычисляем использованную память
set /a used_mem=total_mem-free_mem
rem Переводим в МБ для избежания переполнения при вычислении процента
set /a total_mem_mb=total_mem/1024
set /a used_mem_mb=used_mem/1024
call :log "Конвертация в MB: total=!total_mem_mb! MB, used=!used_mem_mb! MB"
rem Вычисляем процент использования памяти
set /a mem_usage=(used_mem_mb*100)/total_mem_mb
call :log "Рассчитан процент использования памяти: !mem_usage!%%"
echo Использование памяти: !mem_usage!%% (используется !used_mem_mb! MB из !total_mem_mb! MB)
call :log "Использование памяти: !mem_usage!%% (используется !used_mem_mb! MB из !total_mem_mb! MB)"
rem Проверяем, превышен ли порог
if !mem_usage! gtr !MEMORY_THRESHOLD! (
call :log "Порог !MEMORY_THRESHOLD!%% ПРЕВЫШЕН (текущее: !mem_usage!%%)"
call :log "Функция :check_memory - возврат кода 1 (превышение порога)"
exit /b 1
) else (
call :log "Порог !MEMORY_THRESHOLD!%% НЕ превышен (текущее: !mem_usage!%%)"
call :log "Функция :check_memory - возврат кода 0 (норма)"
exit /b 0
)
rem ============================================
rem Функция сравнения версий
rem ============================================
:compare_version
setlocal EnableDelayedExpansion
set "ver1=%~1"
set "ver2=%~2"
for /F "tokens=1-4 delims=." %%a in ("!ver1!") do (
set /a v1=%%a, v2=%%b, v3=%%c, v4=%%d
)
for /F "tokens=1-4 delims=." %%a in ("!ver2!") do (
set /a w1=%%a, w2=%%b, w3=%%c, w4=%%d
)
if !v1! gtr !w1! exit /b 1
if !v1! lss !w1! exit /b -1
if !v2! gtr !w2! exit /b 1
if !v2! lss !w2! exit /b -1
if !v3! gtr !w3! exit /b 1
if !v3! lss !w3! exit /b -1
if !v4! gtr !w4! exit /b 1
if !v4! lss !w4! exit /b -1
exit /b 0
:end_script
call :log "Завершение работы скрипта"
call :log "=========================================="
call :log ""
echo.
echo Окно закроется через 5 секунд...
timeout /t 5 /nobreak > nul
endlocal
exit /b
rem ============================================
rem Функция логирования
rem ============================================
:log
setlocal enabledelayedexpansion
set "message=%~1"
rem Получаем текущую дату и время
for /f "tokens=1-4 delims=/ " %%a in ('date /t') do (
set "log_date=%%a.%%b.%%c"
)
for /f "tokens=1-2 delims=: " %%a in ('time /t') do (
set "log_time=%%a:%%b"
)
rem Записываем в лог-файл
echo [%log_date% %log_time%] %message% >> "%LOG_FILE%"
endlocal
goto :eof
Я в слабые места шаблона добавляю такой сишарп-сниппет:
C#-сниппет для выхода при нехватке памяти:
// Получаем рабочий набор памяти процесса (фактическая используемая память)
var currentProcess = System.Diagnostics.Process.GetCurrentProcess();
long instanceMemoryMB = currentProcess.WorkingSet64 / (1024 * 1024);
// Получаем данные о памяти через командную строку
var processInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c wmic OS get TotalVisibleMemorySize,FreePhysicalMemory /Value");
processInfo.RedirectStandardOutput = true;
processInfo.UseShellExecute = false;
processInfo.CreateNoWindow = true;
var process = System.Diagnostics.Process.Start(processInfo);
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
// Парсим вывод
long totalMemoryKB = 0;
long freeMemoryKB = 0;
foreach (var line in output.Split(new[] { '\n', '\r' }, System.StringSplitOptions.RemoveEmptyEntries))
{
if (line.StartsWith("TotalVisibleMemorySize="))
totalMemoryKB = long.Parse(line.Split('=')[1].Trim());
else if (line.StartsWith("FreePhysicalMemory="))
freeMemoryKB = long.Parse(line.Split('=')[1].Trim());
}
long totalMemoryMB = totalMemoryKB / 1024;
long freeMemoryMB = freeMemoryKB / 1024;
// Выводим текущую информацию в лог
project.SendWarningToLog(
string.Format("Память процесса: {0} МБ | Всего памяти: {1} МБ | Свободно: {2} МБ",
instanceMemoryMB, totalMemoryMB, freeMemoryMB), true
);
// Проверка: свободной памяти меньше 100 МБ
if (freeMemoryMB < 100)
{
project.SendErrorToLog(
"Выход по красной ветке: свободной памяти менее 100 МБ.", true
);
throw new Exception("Выход по ошибке");
}
На красную ветку повешал завершающий проект сниппет с кодом, добавляющим 1 выполнение (перезапуск):
+1 выполнение проекта:
var id = Guid.Parse(project.TaskId);
ZennoPoster.AddTries(id, 1);
Но это не отменяет того, что у некоторых моих клиентов некоторые проекты просто останавливаются на рандомном шаге спустя какое-то время работы. Просто в логе условно после кубика "взять строку" (как пример, это может быть любой другой кубик) из списка происходит останов проекта без останова - последняя строка в логе "Взяли строку..." и все, дальше ничего... При этом ресурсы проца и памяти еще в наличии... Кто-нибудь сталкивался с подобным поведением зенки?