Получить Total CPU # через WMI или T-SQL - PullRequest
1 голос
/ 21 августа 2010

Я не хочу, чтобы список всех процессов, просто общий процент, как вы могли бы видеть в Windows TaskManager.

Я буду использовать эту информацию с помощью Coldfusion, но у меня возникли всевозможные проблемы, я просто пытаюсь найти общее количество текущих загрузок процессора.

Мне все равно, будет ли это wmi или t-sql, я просто хочу общее число, для которого я буду использовать, чтобы заполнить диаграмму калибровки, которая через ajax будет показывать мой текущий процент использования процессора...

Спасибо ...

Ответы [ 3 ]

2 голосов
/ 25 августа 2010

Вы можете использовать класс WMI Win32_PerfRawData_PerfOS_Processor , чтобы получить эту информацию. В своем запросе вы бы использовали Win32_PerfFormattedData_PerfOS_Processor.Name='_Total'. См. Статью ColdFusion и WMI для получения дополнительной информации об использовании WMI, а также образец кода vbscirpt в этой статье .

2 голосов
/ 21 августа 2010

Если бы это был я, я бы настроил счетчик perfmon на рассматриваемой машине для измерения общего процессора. Это можно настроить для записи в файл CSV каждые пару секунд.

Затем можно выполнить задачу, которая каждую минуту записывает этот файл в базу данных, и получить CF для чтения этих данных, чтобы вы могли видеть график с течением времени. Или, если вам нужно самое последнее значение, просто получите CF, чтобы прочитать последнее значение CSV-файла и использовать его для своего датчика.

Лично я храню все данные в базе данных для всех наших веб-серверов, чтобы я мог видеть производительность с течением времени и составлять отчеты о занятости или проблемных периодах. Отлично работает для нас.

Надеюсь, это поможет!

0 голосов
/ 23 марта 2011

Это чужой ответ, но в T-SQL вы можете использовать это:

  DECLARE @ts_now BIGINT
    SELECT @ts_now = cpu_ticks / CONVERT(FLOAT, ms_ticks) FROM sys.dm_os_sys_info

    SELECT top 1 record_id,
            DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS EventTime, 
            SQLProcessUtilization,
            SystemIdle,
            100 - SystemIdle - SQLProcessUtilization AS OtherProcessUtilization,
            100 - SystemIdle AS TotalCPU
    FROM (
            SELECT 
                    record.value('(./Record/@id)[1]', 'int') AS record_id,
                    record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS SystemIdle,
                    record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS SQLProcessUtilization,
                    TIMESTAMP
            FROM (
                    SELECT TIMESTAMP, CONVERT(XML, record) AS record 
                    FROM sys.dm_os_ring_buffers 
                    WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
                    AND record LIKE '% %') AS x
            ) AS y 
    ORDER BY record_id DESC
...