#0
by gr13
у нас есть Диспетчер задач и на закладке процессы есть список процессов. у каждого процесса есть загрузка ЦП в процентах. по какой формуле они считаются и откуда берут исходные данных? самое близкое что я нашел это Win32_Process Class у него есть поле: KernelModeTime Data type: uint64 Access type: Read-only Time in kernel mode, in 100 nanosecond units. If this information is not available, use a value of 0 (zero). но как из него получить вот эти самые проценты?
#1
by NS
Берешь очень мальнький интервал времени, и замеряешь соколько процессорного времени потратил процесс за этот период. Делишь время процесса на время в интервале...
#2
by NS
timebeginperiod; t1:=PProcessInformation.KernelTime; time1:=Timegettime; Sleep; proc:=100*(PProcessInformation.KernelTime-t1)/10000/(timegettime-time1); timeendperiod;
#4
by NS
Вот, нашел пример. можно еще если нужна средняя загрузка с самого начала работы процесса воспользоваться createtime. Бред, а не метод, могу привести кучу причин почему НИКОГДА нельзя пользоваться значением PercentProcessorTime
#6
by NS
Медленное обращение к счетчику. Показывает "среднюю температуру по больнице" - загрузку с момента запуска процесса.
#7
by sapphire
Не я конгечно верю, что Windows создан не Microsoft, а тобою лично, но из msdn: The Win32_PerfFormattedData_PerfProc_Process formatted data class provides precalculated data from performance counters that monitor running application and system processes. All the threads in a process share the same address space and have access to the same data. This class represents the Process object in System Monitor and returns the same data you see in System Monitor. The original data source is the PerfProc performance library. This class derives its raw data from the corresponding raw class Win32_PerfRawData_PerfProc_Process. Data is provided dynamically for this class from the performance library object by the WmiPerfInst provider. Коли англицким владеешь, то returns the same data you see in System Monitor is equals to "у нас есть Диспетчер задач и на закладке процессы есть список процессов. у каждого процесса есть загрузка ЦП в процентах". А задача real-time не стоит. к тому же в Windows есть инструментарий, позволяющий отслеживать пиковые нагрузки и т.д.
#8
by NS
Насчет скорости - представляешь как тормозит WMI? Это средство для ленивых, и в большинстве случаев не очень корректно.
#9
by sapphire
Правда? Сама Microsoft его использует. Конечно, можно и поизголяться. Да, и как же тормозит WMI?
#10
by gr13
нормально отрабатывает, правда я пока не знаю как написать левое соединение для получения этого процента с таблицей win32_process
#11
by NS
правда. Сама майкрософт использует её в одном! приложении, и это функции именно этого приложения. WMI работает через задницу (это средства медленного получения информации), поэтому имеет очень низкую скорость. А так используется
#13
by MMF
например, или PDH API или WMI как известно, сложности в деталях, а нюансов в вопросе счетчиков производительности множество. Вариант - верный способ решить задачу не за час, а за неделю.
#14
by gr13
возможен такой вариант решения exec xp_cmdshell 'wmic path Win32_Process get Caption,ExecutablePath,Handle, ProcessId,VirtualSize, WorkingSetSize /FORMAT:"csv.xsl"' exec xp_cmdshell 'wmic path Win32_PerfFormattedData_PerfProc_Process get idProcess, PercentProcessorTime /FORMAT:"csv.xsl"' потом распарсивание таблиц и объединение их по полю idProcess но во первых запрос к Win32_PerfFormattedData_PerfProc_Process всегда показывает 100% у ожидание системы и еще у одного процесса тоже 100%, чего не может быть а во вторых мне не нравится разделение запусков на 2 процедуры, хорошо было бы сделать в одной
#16
by Kreont
Я таким пользуюсь: Process Explorer Copyright © 1996-2005 Mark Russinovich Sysinternals - www.sysinternals.com Все норм показывает, его полезно дома иметь) Теперь вроде и на сайте МС где то должно быть, так как купил МС весь sysinternals
#19
by Kreont
Потестируй у себя тот Process Explorer норм штука, работает без инсталяции, когда надо анализировать тогда и запускаешь, зачем инсталить на все. (Та и размер небольшой что б передать по нету на точку)
#20
by gr13
On Error Resume Next strComputer = "." Set objRefresher = CreateObject("WbemScripting.SWbemRefresher") Set objServicesCimv2 = GetObject("winmgmts:\" _ & strComputer & "
ootcimv2") If Err = 0 Then Set objRefreshableItem = _ objRefresher.AddEnum(objServicesCimv2 , _ "Win32_PerfFormattedData_PerfProc_Process") objRefresher.Refresh ' Loop through the processes three times to locate ' and display all the process currently using ' more than 1 % of the process time. Refresh on each pass. For i = 1 to 1 Wscript.Echo "Refresh number " & i objRefresher.Refresh For Each Process in objRefreshableItem.ObjectSet If Process.PercentProcessorTime > 1 then WScript.Echo Process.Name & _ vbnewLine & Process.PercentProcessorTime & "%" End If Next Next Else WScript.Echo Err.Description End If теперь бы еще придумать как это реализовать на tsql или просто его запустить не создавая файла и получить результат)
#21
by MMF
примерно так: DECLARE int DECLARE @script int DECLARE @text varchar(8000) DECLARE @code varchar(8000) set @text = '' set @code = 'Function checkProc On Error Resume Next strComputer = "." checkProc = "" Set objRefresher = CreateObject("WbemScripting.SWbemRefresher") Set objServicesCimv2 = GetObject("winmgmts:\" _ & strComputer & "
ootcimv2") If Err = 0 Then Set objRefreshableItem = _ objRefresher.AddEnum(objServicesCimv2 , _ "Win32_PerfFormattedData_PerfProc_Process") objRefresher.Refresh For i = 1 to 1 Wscript.Echo "Refresh number " & i objRefresher.Refresh For Each Process in objRefreshableItem.ObjectSet If Process.PercentProcessorTime > 1 then checkProc = checkProc & Process.Name & _ vbnewLine & Process.PercentProcessorTime & "%" End If Next Next Else checkProc = checkProc & Err.Description End If End Function ' EXEC =sp_OACreate 'ScriptControl',@script OUT IF <> 0 EXEC sp_OAGetErrorInfo @script exec = sp_OASetProperty @script,'Language', 'VBScript' IF <> 0 EXEC sp_OAGetErrorInfo @script EXEC = sp_OAMethod @script,'AddCode', null, @code IF <> 0 EXEC sp_OAGetErrorInfo @script EXEC = sp_OAMethod @script,'eval', @text out, 'CheckProc' IF <> 0 EXEC sp_OAGetErrorInfo @script EXEC =sp_OADestroy @script IF <> 0 EXEC sp_OAGetErrorInfo @script select @text as txt
#22
by MMF
только нужно сконфигурировать параметры безопасности сервера в sp_config Но все это баловство
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- А можно создать программно новый объект метаданных?
- Как программно узнать выходной или невыходной день?
- v81: как программно узнать стек вызовов функции/процедуры?
- Программно добавить обработчик события к программно добавленному элементу формы
- Как перегнать программно печатную форму в формат JPG
- v8: СКД: программно добавить системное поле
- Как программно установить владельца программно созданной колонке
- v7: Как программно узнать готовность принтера
- Подскажите как программно открыть форму документа и программно нажать на ОК?
- Как программно узнать, чем заблокирован файл?
- Как программно закрыть Как программно вызвать окно печати ?
- Программно заполнить значение, программно созданого реквизита
В этой группе 1С
- УПП. не закрывается 44 по налоговому учету
- Разные остатки в главном и подчиненном узле
- Неполучается сделать макет документа
- 1С 8: как сделать график с временной шкалой
- Полоса прокрутки
- Обработка создание документов на основании, тех документов, что выбраны в обработке
- ЗУП: 1-НДФЛ Фактическая сумма вычета не совпадает с правом на вычет...
- ЗиК 7.7 Неправильно расчитывается средний заработок, при расчёте отпускных
- Выгрузка данных в текстовый файл
- ЗУП Работа в выходной в ночную смену
- Метаданные. узнать тип регистра движения.
- Сильно тормозит server 2003
- Как из 1с отобразить окно уведомления в трее
- Обмен данными 7.7 Бух 4.5 -> 8.1 ЗУП 2.5
- Загрузка из Excel: неправильно видит количество строчек в файле
- Че-то меня озадачили - чек возврата на следующий день
- Неправильно списывается амортизация 1с 8.1.15.14 бухгалтерия 1.6.24.7
- 8.2 - работа тонкого клиента через WEB - зависают сессии на сервере!? как сбросить?
- Перерасчет по ставке 20 % отложенного налогового актива
- Как выбрать данные из табличной части регистратора