通过WMI或T-SQL获取总CPU#

时间:2010-08-20 20:59:15

标签: tsql coldfusion wmi cpu-usage perfmon

我不想要所有进程的列表,只是你在windows taskmanager中看到的总百分比。

我将通过coldfusion使用此信息,但我遇到各种问题只是想找到当前cpu使用的总数。

我不在乎它是否来自wmi或t-sql,我只想要一个总数,我将用它来填充一个规格图表,通过ajax将显示我当前的cpu使用百分比... < / p>

谢谢......

3 个答案:

答案 0 :(得分:2)

如果是我,我会在有问题的机器上设置一个perfmon计数器来测量总CPU。这可以配置为每隔几秒写入一个CSV文件。

然后,您可以拥有一个每分钟将该文件写入数据库的任务,并让CF读取该数据,以便随时查看图表。或者,如果您需要最新的值,那么只需让CF读取CSV文件的最后一个值并将其用于您的仪表。

我个人将所有数据都存储在数据库中,以便我可以查看一段时间内的性能,并在忙碌或问题时段运行报告。对我们有用。

希望有所帮助!

答案 1 :(得分:2)

您可以使用Win32_PerfRawData_PerfOS_Processor WMI类来获取此信息。在您的查询中,您将使用Win32_PerfFormattedData_PerfOS_Processor.Name='_Total'。有关使用WMI以及此ColdFusion and WMI中的示例vbscirpt代码的详细信息,请参阅文章article

答案 2 :(得分:0)

这是别人的答案,但在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