Проблема в выполнении пакетного сценария во время события -XX: OnOutOfMemoryError - PullRequest
0 голосов
/ 27 апреля 2018

Я написал сценарий Power Shell на своем сервере Win 2008, чтобы выполнить 4 упомянутых ниже шага всякий раз, когда в системе возникает OutOfMemoryError.

  1. Отправьте пользователям по электронной почте сообщения о перезапуске приложений.
  2. остановить службу приложения
  3. очистить кеш и tmp файлы
  4. запустить службу
  5. напишите пользователям, что служба запущена

Сценарий приведен ниже, и он работает как драгоценный камень, когда выполняется вручную. Я добавил приведенный ниже скрипт .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
...