Wenn du dich am Raspberry auf der Console einloggst, dann kannst du mit dem Befehl „top“ dir den „Task Manager“ anzeigen lassen und dort beobachten welche Prozesse wie viel CPU und RAM „verbrauchen“.
Gleichzeitig vlt. die IPS-Console in der Meldungen-Ansicht offen lassen und schauen, ob sich da bestimmte Dinge/Aufgaben „decken“…
Gib doch mal in der Console beim Raspberry den Befehl aus dem Skript ein, keine Ahnung wie genau der das damit formatiert/anzeigt: top -b -n2 -d1 | grep „Cpu(s)“ | sed „s/., ([0-9.])% id.*/\1/“
Oder auch nur mal so: top -b -n2 -d1 | grep „Cpu(s)“
Oder so: top -b -n2 -d1
…vlt. wird da was falsch geparsed mit dem Befehl!? Oder es wird ein anderer Wert genommen als der Wert den du meinst?!
Also müsste bei 100 - 97,7 = 2,3% CPU Auslastung sein (Core 1). Aber deine Skript-Abfrage holt sich nur den Wert nach dem Komma, wenn ich das richtig sehe… Und deshalb die dauerhaft zu hohe -angebliche- Auslastung.
Die Linux Expressions liegen mir leider nicht so, ich wüsste nur, wie man den Wert mit preg_match parsen kann preg_match(’|.ni,.(.)\sid|’, $string, $match);
…musst du selbst mal ein wenig probieren oder nach einem aktuellen Befehl googeln, um die CPU Auslastung richtig zu parsen.
Zusätzlichen Kram zum Auslesen:
LOAD cat /proc/loadavg
jetzt frage ich mich ob „100 -“ an dieser Stelle richtig ist. Für mich sieht es so aus, dass hier die aktuelle Last von 100 abgezogen wird, d.h. bei tatsächlicher Last von 8 % erhalte ich einen angezeigten Wert von 92 %.
[ol]
[li]Fehler ist das der Regex auf Punktnotation geht aber garnicht gesichert ist, dass das verwendete Locale überhaupt Punktnotation verwendet.
[/li][li]Fehler ist das „top“ im Batchmodul mit einer Iteration von 2 gestartet wird. Dadurch gibt es 2 Zeilen die zusammen gesetzt werden.
[/li][/ol]
Meiner Meinung nach sollte das so aussehen.
SetValueFloat($varid, 100 - (float)(exec('LANG=C top -b -n1 -d1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/"')));
Aber so richtig clever ist die Abfrage nicht, da durch die Abfrage die CPU kurz aufgeweckt wird und zu einer höheren Auslastung führt was dann die Auslastung nicht gut wieder spiegelt. Daher verwendet mal oft lieber werte wie LoadAvg oder man errechnet die Auslastun über /proc/stat und rechnet das anders aus.