CPU in Prozent anzeigen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Zusammen,

    Ich habe eine kleine Frage:

    Man kann ja Temparatur, Speicher, Spannung ect vom Raspberry auslesen.
    Dies Funktioniert bei mir auch, jedoch würde ich gerne auch die CPU Auslastung in % auslesen, ist dies auch machbar?

    Ich rede von solchen ssh Befehlen
    /opt/vc/bin/vcgencmd measure_temp | tr -d ""temp="" | tr -d ""'C"""
    "/opt/vc/bin/vcgencmd measure_volts | tr -d ""volt="" | tr -d ""V"""


    p.s.
    Oder zumindest CPU Gesamt
    und
    CPU Belegt damit ich es rechnen kann.
    Danke

    Ready when you are :bravo2:

    Einmal editiert, zuletzt von schnibli (13. Juli 2014 um 18:02)

  • Hallo und Vielen Dank, dies wusste ich schon...
    Ich frage über mein vb.net Programm gewisse Daten ab und da brauche ich nur den wert nicht die laufenden Prozesse :s
    Beispiele:


    ich hoffe ich hab es diesmal richtig erklärt :)

    Ready when you are :bravo2:

  • Dies Funktioniert bei mir auch, jedoch würde ich gerne auch die CPU Auslastung in % auslesen, ist dies auch machbar?

    Selbstverständlich, aber nicht über vcgencmd.

    Die trügerisch vermeintlich einfachste Möglichkeit (aber leider auch die Irrtümlichste) wäre die Ausgabe von top oder htop zu filtern - da der PI nur einen CPU Core hat gestaltet sich das recht einfach:

    Code
    top -b -n1 | grep "%Cpu"

    Die dabei ausgegeben Werte bedeuten:

    Code
    us, user    : time running un-niced user processes
               sy, system  : time running kernel processes
               ni, nice    : time running niced user processes
               wa, IO-wait : time waiting for I/O completion
               hi : time spent servicing hardware interrupts
               si : time spent servicing software interrupts
               st : time stolen from this vm by the hypervisor

    Das ist aber vergleichsweise ziemlich langsam aber das größte Problem ist dass der Aufruf von top oder htop selbst ebenfalls eine nicht zu verachtende CPU Belastung erzeugt und somit die Ausgabe verfälscht!
    Aus diesem Grund würde ich von dieser einfachen Weise Abstand nehmen und strickt abraten!


    Ein weiterer Wert der von so manch einem verwendet wird sind die LOAD Averages, wie man sie vom uptime Befehl ausgegeben kriegt oder die Datei /proc/loadavg enthält. Aber auch diese lassen keine eindeutigen Rückschlüsse auf die Prozentuale CPU Auslastung zu.

    Du könntest auch die % Werte von ps aux auslesen und zusammenrechnen, aber das ist auch nicht sonderlich genau.


    Die aus meiner Sicht besten Werte - wie ich sie auch in der cpu.php verwendet habe - stehen in der virtuellen Datei /proc/stat wobei uns im Fall des PI's nur die erste 'cpu' Zeile interessiert.

    Dabei muss man beachten das sich die Auslastung aus mehreren Werten zusammensetzt und somit ist die Berechnung etwas aufwändiger.

    Hinweis:
    Die CPU-Werte in /proc/stat sind Zähler. Um den "Verbrauch" zwischen zwei Messungen zu ermitteln, muss man deshalb die Werte der vorherigen Messung zwischenspeichern (natürlich für jeden Core getrennt --> Arrays "TOTAL_LAST" und "BUSY_LAST") und dann die Differenz zwischen dem aktuellen Messwert/Zählerstand und den vorherigen Werten berechnen.
    Die Multiplikation mit "1000" statt mit "100" ermöglicht die Ausgabe einer Dezimalstelle, da in der Bash nur mit ganzen Zahlen gerechnet werden kann.

    Und hier das Script:


    Lass das Script mal ein paar mal durch laufen bevor du dir da nur das raus pickst wovon du glaubst das nur zu brauchen...

  • Naja führt man vmstat aus sieht das so aus:

    Code
    procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
     0  0      0  15668  31428 393072    0    0     2     4  144   32  0  0 99  0

    Dich interessiert nur der letzte Abschnitt unter 'cpu' also "us", "sy", "id" und "wa"
    us -> user
    sy -> system
    id -> idle
    wa -> waiting

    Wenn da 99 unter Idle steht, ist das System also nur zu 1% ausgelastet - allerdings wird nirgends das eine Prozent angezeigt und deshalb hab ich diese Möglichkeit im vorherigen Beitrag nicht in Betracht gezogen da das wie ich finde zu ungenau ist:

    Das lässt sich leider sehr einfach feststellen indem man einfach ein 2.PuTTY auf macht und dort top -c -d 1 ausführt und im 1.PuTTY vmstat kontrolliert --> obwohl top eine CPU Auslastung von 3,8% bis 4,8% erzeugt zeigt vmstat weiterhin 99 Idle an - das kann also nicht passen!

  • Halli hallo ...
    Naja, stimmt schon ... vmstat ist der Durchschnitt seit bootup ...

    Aber: da fällt mir noch was anderes ein:
    Im Zusammenhang mit dem Nokia 5110 Display war doch ein Programm mit einer kleinen C-routine zur Abfrage der CPU-Last und anderen Parametern.
    Guckst Du mal -> hier <- ...

    cu,
    -ds-

  • meigrafd , Ich habe dein Script ein bischen überarbeitet :)

    eine Lösung in Form von einem fertigen Programm habe ich nicht gefunden, einzig und allein htop zeigt mir aktuelle Werte an, top sar und co berechnen die CPU Last irgendwie anders ( seit systemstart, tagesdurchschnitt ? ).


    Änderungen vom Ausgans script :

    * Loopfunktion entfernt ( script jetzt einfach mit watch -n1 ausführen )
    * erste Messung korrekt ( beim org. script war die erste Messung immer fehlerhaft da kein Vergleichswert )
    * Dezimalstellen für Nachkommawerte auf 3 Zeichen beschränkt ( org. script gab für Werte über 0.999 0.1000 aus )
    * Formatierung hinzugefügt
    * Durchschnittswert aller CPU Kerne hinzugefügt.

    Einmal editiert, zuletzt von speefak (20. September 2017 um 04:09)

  • Auch wenn es schon lange her ist...evtl. stolpern dennoch noch einige über dieses Thema.

    Wenn man die beiden Skripte von meigrafd und speefak mit der Auslastungsanzeige in der Taskleiste vergleicht, so scheint es, dass das Skript von speefak die CPU-Auslastung bereits wieder deutlich beeinflusst und daher den von meigrafd beschriebenen Vorteil wieder eliminiert. Es liefert reproduzierbar höhere Werte.

    Eine längere Wartezeit (z.B. 5 s wie bei meigrafd ist auf jeden Fall von Vorteil). Evtl. wird dadurch die CPU-Auslastung durch den Start des Skripts zeitlich ausgeglichen/rausgemittelt.

    Das ist meine Beobachtung. Mit bash-Skripten bin ich leider blutiger Anfänger.

    Verbessert mich gerne! :)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!