2010-08-20 39 views
1

Je ne veux pas la liste de tous les processus, juste un pourcentage total comme vous le verriez dans Windows Taskmanager.Get Total CPU # via WMI ou T-SQL

je vais utiliser ces informations via coldfusion, mais je rencontre toutes sortes de problèmes juste essayer de trouver un nombre total d'utilisation du processeur actuel. Je ne m'inquiète pas si elle vient de wmi ou de t-sql, je veux juste un nombre total pour lequel j'emploierai pour remplir un graphique de jauge qui par l'intermédiaire d'ajax montrera mon pourcentage actuel d'utilisation de processeur ...

Merci ...

+0

http://crosenblum.pastebin.com/sTjwsmck Voici comment j'interroger les wmi via ce wmi cfc fonction de requête: \t \t \t \t crosenblum

Répondre

2

Vous pouvez utiliser la classe WMI Win32_PerfRawData_PerfOS_Processor pour obtenir ces informations. Dans votre requête, vous utiliserez Win32_PerfFormattedData_PerfOS_Processor.Name='_Total'. Voir l'article ColdFusion and WMI pour plus d'informations sur l'utilisation de WMI ainsi que l'exemple de code vbscirpt dans ce article.

+0

Quel compteur dois-je utiliser pour obtenir l'utilisation totale du processeur, similaire au gestionnaire de tâches? PercentUserTime, ou PercentPrivaledgedTime etc. – crosenblum

+0

Si vous souhaitez utiliser l'unité centrale totale, vous devez utiliser PercentProcessorTime et TimeStamp_Sys100NS. Il y a un exemple de code dans le deuxième article qui montre comment utiliser ces valeurs pour calculer le pourcentage, albiet dans VBScript. – Garett

+0

Les valeurs que je récupère grom TimeSpan_Sys100NS sont toujours vides ou vides. Donc, cette formule ne fonctionne pas. Aurais-je besoin d'ajuster cela pour l'utiliser sur Vista? – crosenblum

2

Si c'était moi je voudrais installer un compteur perfmon sur la machine en question pour mesurer CPU totale. Cela peut être configuré pour écrire dans un fichier CSV toutes les deux secondes.

Vous pouvez alors soit une tâche qui écrit ce fichier à la base de données chaque minute et obtenir CF lire ces données afin que vous puissiez voir un graphique au fil du temps. Ou, si vous avez besoin de la valeur la plus récente, il suffit d'obtenir CF pour lire la dernière valeur du fichier CSV et l'utiliser pour votre jauge.

Personnellement je stocke toutes les données dans la base de données pour tous nos serveurs web afin que je puisse voir les performances au fil du temps et exécuter des rapports sur les périodes de pointe ou problème. Fonctionne très bien pour nous.

Espérons que ça aide!

0

Cette personne la réponse d'un autre, mais dans T-SQL, vous pouvez utiliser ceci:

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