Как то возникла необходимость мониторить использование памяти приложением oracle weblogic на windows 2008 server. Под мониторингом подразумевается контроль использования оперативной памяти и при достижении определенного размера памяти "прибить" процесс. Нашел скрипт на vbs и переделал под свою систему. Каждые 5 минут скрипт проверяет процессы с именем java.exe и если размер занимаемой процессом памяти превышает 20Гб и параметр ThreadCount <5 то высылаем сообщение на почту. Также можно раскомментировать строчку
Примечание. Если у вас настроен NodeManager, то он автоматом будет поднимать упавшую ноду.
тогда процесс будет "уничтожаться".'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
Комментариев нет:
Отправить комментарий