Я написал сценарий Power Shell на своем сервере Win 2008, чтобы выполнить 4 упомянутых ниже шага всякий раз, когда в системе возникает OutOfMemoryError.
- Отправьте пользователям по электронной почте сообщения о перезапуске приложений.
- остановить службу приложения
- очистить кеш и tmp файлы
- запустить службу
- напишите пользователям, что служба запущена
Сценарий приведен ниже, и он работает как драгоценный камень, когда выполняется вручную. Я добавил приведенный ниже скрипт .ps1 в файл .bat и обновил запись в реестре как
-сервер -Xms1024m -Xmx1536m -XX: MaxPermSize = 256m -XX: + UseParallelOldGC -XX: OnOutOfMemoryError = "D: \ Support \ UWD_OOM_restart.bat" * 21
Проблема : Всякий раз, когда возникает ошибка OOM, пакетный сценарий вызывает сценарий Power Shell, но автоматически выполняются только первые 3 шага. Последние 2 шага (запуск службы и отправка по электронной почте конечным пользователям не выполняются автоматически). Нужна помощь в этом случае
Сценарий Power Shell:
$hostname = 'XXXXXX'
$smtpServer = 'xxxxxxxx'
$from = "xxxxxxxx@xxxxxxxx.com"
$recipients = 'xxxxxxxx@xxxxxxxx.com'
$Subject = "Restarting Apps - UWD Service on $hostname due to Java OUT OF MEMORY ERROR"
$body = "This is an automated message to confirm that the UWD service on xxxxxxxx server is about to be restarted, as the application has encountered Java out of memory error and went to unresponsive state. Kindly ignore any alerts for the next 10 minutes from this service."
Send-MailMessage -To $recipients -Subject $Subject -Body $body -From $from -SmtpServer $smtpServer
# Stop service
$service = 'xxxxxxxx"
Stop-Service -name $service -Verbose
do {
Start-sleep -s 5
}
until ((get-service $service).Status -eq 'Stopped')
# Folder delete
rm -r -fo 'D:\xxxxxxx\cache'
rm -r -fo 'D:\xxxxxxx\tmp'
# Start service
start-Service -name $service -Verbose
do {
Start-sleep -s 5
}
until ((get-service $service).Status -eq 'Running')
# Send confirmation that service has restarted successfully
$Subject = "UWD Service Restarted Successfully on $hostname"
$body = "This mail confirms that the UWD application service on $hostname is now running.
Application Team, Kindly smoke test your application and inform xxxxxx for any issues."
Start-Sleep -s 5
Send-MailMessage -To $recipients -Subject $Subject -Body $body -From $from -SmtpServer $smtpServer