Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Windows

Прерывание работы программы при утечке памяти : Windows

02.05.2024 12:46


11.01.2024 10:57
OlegON
 
У меня один из сервисов, написанный на каких-то костылях, которые никто не помнит и не знает, повадился зависать.
Судя по всему, 32-битный говнокод просто доходил до какого-то порогового значения памяти утечкой ресурсов и тихо помирал.
В этом случае коллега получал сообщение мониторинга, передавал другому коллеге, а тот шел на сервер и перезапускал сервис.
Решил немного нарушить эту продуктивность и написал два скрипта.
В файле C:\BOB\chk_mem.ps1
Код:
$processName = "EXE-Name.server"
$process = Get-Process -Name $processName -ErrorAction SilentlyContinue
if ($process) {
$memoryUsageGB = $process.PrivateMemorySize64 / 1GB
Write-Host "Memory usage: $memoryUsageGB GB"
if ($memoryUsageGB -gt 1) {$process.Kill()
    }
}
И, для удобства C:\BOB\chk_mem.cmd
Код:
powershell.exe -ExecutionPolicy Bypass -File "C:\BOB\chk_mem.ps1"
Второй файлик добавил в назначенные задания с интервалом 5 минут.
Собственно, суть этого скрипта - прибивать процесс, когда сервис утекает больше чем на 1Гб памяти. В этом случае прибивается процесс, а в свойствах сервиса, которым запускается эта дрянь, уже стоит перезапуск в случае сбоя. Поскольку разработчик не позаботился о нормальной обработке ошибки, пришлось генерировать ее со стороны.
Часовой пояс GMT +3, время: 12:46.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.