【问题标题】:Get Total CPU # via WMI or T-SQL通过 WMI 或 T-SQL 获取总 CPU #
【发布时间】:2011-04-01 21:10:35
【问题描述】:

我不想要所有进程的列表,只想要你在 Windows 任务管理器中看到的总百分比。

我将通过 Coldfusion 使用此信息,但我遇到了各种问题,只是试图找出当前 cpu 使用的总数。

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

谢谢...

【问题讨论】:

标签: tsql coldfusion wmi cpu-usage perfmon


【解决方案1】:

如果是我,我会在相关机器上设置一个性能计数器来测量总 CPU。这可以配置为每隔几秒钟写入一个 CSV 文件。

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

我个人将所有网络服务器的所有数据都存储在数据库中,这样我就可以查看一段时间内的性能,并在繁忙或问题期间运行报告。非常适合我们。

希望有帮助!

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我应该使用哪个计数器来获取总 cpu 使用率,类似于任务管理器? PercentUserTime 或 PercentPrivaledgedTime 等
    • 如果你想要总 cpu 使用率,那么你将需要 PercentProcessorTime 和 TimeStamp_Sys100NS。第二篇文章中的示例代码展示了如何使用这些值来计算百分比,虽然在 VBscript 中。
    • 我从 TimeSpan_Sys100NS 返回的值始终为空白或为空。所以这个公式不起作用。我是否需要对此进行调整才能在 Vista 上使用?
    • 您的查询是什么样的?你能用你正在使用的查询更新你的帖子吗?
    • 我对冷聚变不是很熟悉,但是你能不能把查询改成obj_wmi.execQuery( "Win32_PerfFormattedData_PerfOS_Processor.Name='_Total'" )或者select * from Win32_PerfFormattedData_PerfOS_Processor where name = '_Total'。您也可以尝试在 Vista 上运行 vbscript 示例,看看它是否有效。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 2017-12-09
      相关资源
      最近更新 更多