YandexDirect

16 августа 2018

Мониторинг приложений java на Windows с помощью VBS

Как то возникла необходимость мониторить использование памяти приложением oracle weblogic на windows 2008 server. Под мониторингом подразумевается контроль использования оперативной памяти и при достижении определенного размера памяти "прибить" процесс. Нашел скрипт на vbs и переделал под свою систему. Каждые 5 минут скрипт проверяет процессы с именем java.exe и если размер занимаемой процессом памяти превышает 20Гб и параметр ThreadCount <5 то высылаем сообщение на почту. Также можно раскомментировать строчку
'objProcess.Terminate
тогда процесс будет "уничтожаться".

Примечание. Если у вас настроен NodeManager, то он автоматом будет поднимать упавшую ноду.




strComputer = "."
On Error Resume Next
dim ProcName, ProcID
 Set objShell = CreateObject("WScript.Shell")
 Set objFSO = CreateObject("Scripting.FileSystemObject")
 Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Do Until x = 2
 Set colProcessList = objWMIService.ExecQuery _
' если имя приложения java.exe и размер памяти превысил 20 Гб
    ("Select * from Win32_Process Where Name = 'java.exe' AND workingSetSize > 21474836480")
 For Each objProcess in colProcessList
'смотрим параметр ThreadCount, если он меньше 5
 if objProcess.ThreadCount < 5 then
   ProcName = objProcess.Name
   ProcID = objProcess.ProcessId
   WSCript.Echo objProcess.Name
   WSCript.Echo objProcess.ProcessId
                        WSCript.Echo objProcess.ThreadCount
   call outputMessage(ProcName, ProcID) ' вызвать процедуру, которая отправит сообщение на почту
   'objProcess.Terminate 'убить процесс
                        WSCript.Echo vbCrLf
   'WScript.Sleep(180000)
 end if
 Next
 WScript.Sleep(300000) 'Five minute wait to try again
Loop
Sub outputMessage(processname, processid)
Set emailObj      = CreateObject("CDO.Message")
emailObj.From     = "email@host.kz"
emailObj.To       = "recipient@mail.kz"
emailObj.Subject  = "Subject"
emailObj.TextBody = processname & " " & processid & " "
emailObj.TextBody = emailObj.TextBody & Date & " " & Time
Set emailConfig = emailObj.Configuration
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "Your SMTP server"
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing")    = 2
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0
'emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl")      = true
'emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername")    = "YourUserName"
'emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword")    = "Password1"
emailConfig.Fields.Update
emailObj.Send
'If err.number = 0 then Msgbox "Done"
End Sub
Сохраняем скрипт с расширением vbs и запускаем следующим образом:


cscript sendemail.vbs













Все теперь скрипт висит в памяти и каждые 5 минут проверяет условия.

Комментариев нет:

Отправить комментарий

Общее·количество·просмотров·страницы