我不想要所有进程的列表,只是你在windows taskmanager中看到的总百分比。
我将通过coldfusion使用此信息,但我遇到各种问题只是想找到当前cpu使用的总数。
我不在乎它是否来自wmi或t-sql,我只想要一个总数,我将用它来填充一个规格图表,通过ajax将显示我当前的cpu使用百分比... < / p>
谢谢......
答案 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