我不想要所有进程的列表,只想要你在 Windows 任务管理器中看到的总百分比。
我将通过coldfusion使用这些信息,但我遇到了各种各样的问题,只是试图找到当前cpu使用的总数。
我不在乎它是来自 wmi 还是 t-sql,我只想要一个总数,我将用它来填充一个仪表图表,通过 ajax 将显示我当前的 cpu 使用百分比......
谢谢你...
我不想要所有进程的列表,只想要你在 Windows 任务管理器中看到的总百分比。
我将通过coldfusion使用这些信息,但我遇到了各种各样的问题,只是试图找到当前cpu使用的总数。
我不在乎它是来自 wmi 还是 t-sql,我只想要一个总数,我将用它来填充一个仪表图表,通过 ajax 将显示我当前的 cpu 使用百分比......
谢谢你...
您可以使用Win32_PerfRawData_PerfOS_Processor WMI 类来获取此信息。在您的查询中,您将使用Win32_PerfFormattedData_PerfOS_Processor.Name='_Total'
. 有关使用 WMI 的更多信息以及本文中的示例 vbscirpt 代码,请参阅文章ColdFusion和 WMI。
如果是我,我会在相关机器上设置一个性能计数器来测量总 CPU。这可以配置为每隔几秒钟写入一个 CSV 文件。
然后,您可以有一个任务,每分钟将该文件写入数据库,并让 CF 读取该数据,以便您可以看到一段时间内的图表。或者,如果您需要最新的值,那么只需让 CF 读取 CSV 文件的最后一个值并将其用于您的仪表。
我个人将所有网络服务器的所有数据都存储在数据库中,这样我就可以查看一段时间内的性能,并在繁忙或问题期间运行报告。非常适合我们。
希望有帮助!
这是别人的答案,但在 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