CPU Auslastung Xeon Server



  • Guten Abend,

    ich suche nach einer Lösung um die CPU Auslastung eines Servers (2x4 Kerne)
    zu ermitteln. Es gibt hier diverse Ansätze - jedoch funktionieren diese nur mit
    einer CPU.
    Vielen Dank für Hinweise!
    KS



  • http://openhardwaremonitor.org/

    Das ist ne .NET Lib mit der man alles mögliche auslesen kann, darunter auch die CPU Auslastung.
    Und zwar "total" bzw. auch pro Core.
    Alle Werte die du hier siehst sind auch über die Lib zugänglich:
    http://openhardwaremonitor.org/wordpress/wp-content/uploads/2011/04/screenshot1.png

    Sollte eigentlich auch mit mehreren CPUs funktionieren.

    Weiters sollte sich das ganze auch über WMI bzw. die Performance Counter API abfragen lassen.

    Ansonsten schreib' mal welche Ansätze du kennst, und warum diese mit > 1 CPU Probleme machen. Vielleicht guckst du bloss nicht richtig 😉



  • Danke für die Antwort:

    http://openhardwaremonitor.org/
    Hier scheint es keine C++ Sourcen zu geben, sondern XML.

    Dieses Beispiel funktioniert gut mit einer CPU:

    double GetCPULoad()
    {
        static DWORD dwLastProcessTime = 0;
        static DWORD dwLastSystemTime = 0;
        static double dCPULoad = 0;
    
        FILETIME ftCreationTime, ftExitTime, ftKernelTime, ftUserTime;
        GetProcessTimes(GetCurrentProcess(),&ftCreationTime,&ftExitTime,&ftKernelTime,&ftUserTime);
    
        ULARGE_INTEGER uiKernelTime, uiUserTime;
        uiKernelTime.HighPart = ftKernelTime.dwHighDateTime;
        uiKernelTime.LowPart  = ftKernelTime.dwLowDateTime;
        uiUserTime.HighPart = ftUserTime.dwHighDateTime;
        uiUserTime.LowPart  = ftUserTime.dwLowDateTime;
    
        DWORD dwActualProcessTime = (DWORD)((uiKernelTime.QuadPart + uiUserTime.QuadPart)/100);
        DWORD dwActualSystemTime  = GetTickCount();
    
        if(dwLastSystemTime) {
            dCPULoad = (double)(dwActualProcessTime-dwLastProcessTime)/(dwActualSystemTime-dwLastSystemTime);
        }
        dwLastProcessTime = dwActualProcessTime;
        dwLastSystemTime  = dwActualSystemTime;
    
        return dCPULoad;
    }
    

    Gruß!
    KS



  • Ah, ja, weil das Beispiel Bullshit ist.

    1. Mit GetProcessTimes bekommst du nur die Rechenzeit die der eine Prozess verbraten hat dessen Handle du übergibst. Nicht die gesamte CPU Auslastung.
    2. Die CPU Zeit läuft in Echtzeit pro Core. D.h. man müsste entweder die CPU Zeit durch die Core-Anzahl dividieren oder die "system time" in diesem Beispiel mit der Core-Anzahl multiplizieren.

    ks schrieb:

    diverse Ansätze

    OK, nächster.

    ks schrieb:

    Danke für die Antwort:

    http://openhardwaremonitor.org/
    Hier scheint es keine C++ Sourcen zu geben, sondern XML.

    XML? Hä?
    Der Source ist in C#.
    Du solltest dir da aber rauslesen können wie es geht und das selbe dann in C++ umsetzen.

    ps: Du verwechselst CPU und Cores bzw. Hardware-Threads. Das von dir gezeigte Beispiel macht genau so Probleme mit einer Quad-Core CPU, bzw. sogar schon mit einer Single-Core CPU mit Hyper-Threading.



  • Ah, ja, weil das Beispiel Bullshit ist.
    Ich bevorzuge eine sachliche Ausdrucksweise.

    1. Mit GetProcessTimes bekommst du nur die Rechenzeit die der eine Prozess >verbraten hat dessen Handle du übergibst. Nicht die gesamte CPU Auslastung.

    Wohl wahr. Wenn die Anwendung die hauptsächlich Aktive auf dem Rechner (ist hier der Fall) ist, kann man die übrigen Prozesse vernachlässigen und erhält mit dem Beispiel brauchbare Werte bei einem Kern.

    XML? Hä?
    Ja. Im Download-Bereich der von Dir benannten Seite. Hilfreich bei Fragen sind sachbezogene, konkrete Antworten.

    Ich habe zwischenzeitlich das hier gefunden:
    http://www.codeproject.com/Articles/3413/How-to-get-CPU-usage-by-performance-counters-witho
    Das Programm fragt die
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\PerfProc\Performance
    Werte ab. Ein erster Test auf dem Server zeigt ähnliche Werte wie Taskmanager und PE.

    Gruß!
    KS



  • ks schrieb:

    Ah, ja, weil das Beispiel Bullshit ist.
    Ich bevorzuge eine sachliche Ausdrucksweise.

    Komplett falsch <-> Bullshit, wo ist der Unterschied?
    Empfindlich?

    ks schrieb:

    XML? Hä?
    Ja. Im Download-Bereich der von Dir benannten Seite. Hilfreich bei Fragen sind sachbezogene, konkrete Antworten.

    Wo war etwas nicht hilfreich und nicht sachbezogen? Wenn du es vorziehst kann ich das nächste mal auch einfach nicht antworten.

    ks schrieb:

    Ich habe zwischenzeitlich das hier gefunden:
    http://www.codeproject.com/Articles/3413/How-to-get-CPU-usage-by-performance-counters-witho
    Das Programm fragt die
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\PerfProc\Performance
    Werte ab. Ein erster Test auf dem Server zeigt ähnliche Werte wie Taskmanager und PE.

    Ja, Performance-Counter. Hatte ich ja erwähnt.



  • @ks Man kann doch im DL-Bereich das SVN "Source" einsehen?? 😕 😕 😕


Log in to reply