Ad Widget

Collapse

Имя процесса, загружающего процессор

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • dmzbx
    Junior Member
    • May 2011
    • 2

    #1

    Имя процесса, загружающего процессор

    Добрый день!
    Может кто занимался решением вопроса о получении имени процесса (процессов), который в данный момент времени сильнее остальных нагружает процессор? Просто есть триггер, который срабатывает при загрузке ЦПУ свыше 90%. Хотелось бы знать, кто именно загружает. Речь идет о Win2k3 sp2 R2
  • Sanki
    Member
    • Mar 2010
    • 46

    #2
    Поддерживаю вопрос.
    А еще лучше было бы получать информацию как в диспетчере задач. Список процессов и сколько этот процесс грузит проц.

    Comment

    • VoRoN
      Junior Member
      • Nov 2013
      • 5

      #3
      Подниму тему, тоже очень актуально

      Comment

      • v.goncharov
        Member
        • Mar 2013
        • 58

        #4
        Недавно задались этим вопросом. В итоге на Java была написана программа, которая через WMI опрашивает потребление процессора и памяти приложениями, под эту программу написан шаблон низкоуровнего обнаружения, который создает как итемы все запущенные процессы и пишет их потребление памяти и процессора, и на них, соответственно, висят триггеры.

        Автор программы не я, поэтому пока что программой не могу поделиться.

        В результате выяснилось, что частое общение с агентом сильно грузят заббикс-сервер, поэтому сейчас реализовано так: программа отдает через zabbix_agent структурированный список запущенных приложений и потребления памяти и процессора, со стороны заббикс-сервера скрипт, который парсит это дело, список приложений отдает в LLD, а потребление проца и памяти - уже в конкретные итемы внутри LLD, при этом все данные между опросами хранит в кеше.

        В Zabbix 2.2 обещают нативную поддержку WMI, и как раз rc2 вышел
        Last edited by v.goncharov; 07-11-2013, 17:37.

        Comment

        • Navoyenok
          Senior Member
          • Dec 2011
          • 101

          #5
          Доброго времени суток, уважаемые.

          Использую для этих целей скрипт:

          'Using UserParameter=TopProcess,cscript /nologo c:\zabbix\topprocess.vbs
          Option explicit

          Dim objWMIService, colItems, objItem, strComputer
          Dim MaxTimeUser, MaxNameUser, MaxTimeKernel, MaxNameKernel

          strComputer = "."

          MaxTimeUser = 0
          MaxNameUser = "Do not detected"

          MaxTimeKernel = 0
          MaxNameKernel = "Do not detected"

          Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
          Set colItems = objWMIService.InstancesOf("Win32_Process")
          For Each objItem In colItems
          if (objItem.UserModeTime/1000000000)>(MaxtimeUser/1000000000) then
          MaxTimeUser = objItem.UserModeTime
          MaxNameUser = objItem.Name
          end if
          if (objItem.KernelModeTime/1000000000)>(MaxtimeKernel/1000000000) then
          MaxTimeKernel = objItem.KernelModeTime
          MaxNameKernel = objItem.Name
          end if

          ' WScript.Echo objItem.ProcessId & ":" & objItem.Name & ":" & objItem.KernelModeTime
          Next

          WScript.Echo "Kernel:" & MaxNameKernel & ", User:" & MaxNameUser

          Set objWMIService = Nothing
          Set colItems = Nothing

          Comment

          • VoRoN
            Junior Member
            • Nov 2013
            • 5

            #6
            Спасибо большое!

            Можете еще подсказать? Пытаюсь отправить данные через zabbix_sender в скрипте, но они не уходят (если отправляю через cmd, то все ок)

            красным выделил то что добавил в Ваш скрипт

            Code:
            'Using UserParameter=TopProcess,cscript /nologo c:\zabbix\topprocess.vbs
            Option explicit
            
            [COLOR="red"]Dim WshShell[/COLOR]
            Dim objWMIService, colItems, objItem, strComputer
            Dim MaxTimeUser, MaxNameUser, MaxTimeKernel, MaxNameKernel
            
            strComputer = "."
            
            MaxTimeUser = 0
            MaxNameUser = "Do not detected"
            
            MaxTimeKernel = 0
            MaxNameKernel = "Do not detected"
            
            Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
            Set colItems = objWMIService.InstancesOf("Win32_Process")
            For Each objItem In colItems
            	if (objItem.UserModeTime/1000000000)>(MaxtimeUser/1000000000) then
            		MaxTimeUser = objItem.UserModeTime
            		MaxNameUser = objItem.Name
            	end if
            
            	if (objItem.KernelModeTime/1000000000)>(MaxtimeKernel/1000000000) then
            		MaxTimeKernel = objItem.KernelModeTime
            		MaxNameKernel = objItem.Name
            	end if
            
            	'WScript.Echo objItem.ProcessId & ":" & objItem.Name & ":" & objItem.KernelModeTime
            Next
            
            'WScript.Echo "Kernel:" & MaxNameKernel & ", User:" & MaxNameUser
            
            [COLOR="red"]set WshShell = WScript.CreateObject("WScript.Shell")
            
            WshShell.Run """C:\Zabbix\zabbix_sender"" -c ""C:\Zabbix\zabbix_agentd.conf"" -s ""srvtc-001"" -k ""TopProcess"" -o ""Kernel:" & MaxNameKernel & ", User:" & MaxNameUser & """", 0, True[/COLOR]
            
            Set objWMIService = Nothing
            Set colItems = Nothing

            Comment

            Working...