auf einem Raspi2 mit aktueller Beta habe ich bei einem „seit Monaten nicht geänderten IPS (da meine Heizungssteuerung)“ heute früh einen Absturz des IPS-Dienstes gehabt. Problem begann mit „Too many scripts at once. Dropping execution.“, diese Meldung kam dann innerhalb von 10Minuten immer häufiger - bis zum Absturz.
die Meldung könnte nur ein Symptom sein. Wenn die RaspberryPi Version zu viele Skripte auf einmal starten möchte, wird das verhindert. Prinzipiell wird das so gemacht, um einen Absturz möglichst zu verhindern.
Ein Grund könnte sein, dass du regelmäßig Skripte startest, die sich aufhängen. Das kann vor allem bei Skripten mit Netzwerkkomponenten passieren. Nutzt du sowas?
Ansonsten kannst du nächstes mal wenn der Ferhler auftritt mit der Konsole in den „PHP Informationen“ (unter Ansicht hinzufügen) schauen welche(s) Skript(e) verantwortlich ist und das ganze weiter eingrenzen.
IPS-Console öffnen, oben links auf „Ansicht hinzufügen“ und dann ganz unten auf „PHP Informationen“, dann siehst du alle Threads und welche Scripte da gerade laufen oder hängen (rot markiert).
Einfach schauen, welche Scripte da in der von Gucky genannten Ansicht länger stehen bleiben. Ein Script sollte, wenn es nicht irgendwas kompliziertes tut und fehlerfrei läuft, dort immer nur kurz auftauchen und sofort wieder verschwinden. Dort kann man schön sehen, welche Scripte ausgeführt werden und ggf Probleme machen.
wir stellen IP-Symcon momentan auf PHP embed um. Vermutlich wird das dein Problem lösen. Sag aber gerne bescheid ob dein "ini_set(‚max_execution_time‘, 10); " bei deinem Problem geholfen hat.
nachdem ich nun einige Wochen (nach Paresys Änderungen hinsichtlich JSON-RPC) überhaupt keine Probleme auf den PIs mehr hatte, sind die hängenden Threads jetzt wieder da.
Bis zur Version: 29.09.2015, 7bfaf82d8cd0 war alles okay. Danach sind die hängenden Threads wieder da.
Wenn ich die Version vom 29.09. wiederherstelle (sudo dpkg -i symcon_4.0-246_armhf.deb) - ist wieder alles okay.
leider nein. Fehler tritt bei einem Script auf, welches ich (per include) grundsätzlich für die Übertragung von Werten an einen anderen Symcon-Rechner nutze. Ich setze es praktisch auf allen 7 Symcon-Installationen ein. Verursacht nur in der neuen Version diese Abstürze (blockierte PHP-Threads).
<?
if (GetValue(58285 /*[Tools, Service\Netzwerk erreichbar\Watchdog LAN\Haussteuerung]*/)!=True) {
echo "
Haussteuerung nicht erreichbar (".$_IPS['SELF'].")";
if ($AutoRepeat) {
IPS_SetScriptTimer($_IPS['SELF'],250);
}
Goto Ende_Script;
}
$Par_ID=IPS_GetParent($_IPS['SELF']);
$Wert=GetValue($Par_ID);
//echo "
Zu sendender Wert = $Wert";
$rpc=new JSONRPC("http://ips-user:password@ip-adresse:port/api/");
//
try {
throw new Exception ($rpc->SetValue($Ziel_ID,$Wert));
}
catch (Exception $e) {
$e->getMessage();
$fehler1=strpos ($e,'error'); //keine Verbindung
$fehler2=strpos ($e,'Invalid'); //falscher Name/Passwort
if ($fehler1 || $fehler2) {
echo "
$fehler1 Exception abgefangen: ", $e->getMessage(), "
";
if ($AutoRepeat) {
echo "AutoRepeat ist aktiv setze Wiederholungsintervall";
if (IPS_GetScriptTimer($_IPS['SELF']) <240) {
$Offset=rand(200,20000 /*[Objekt #20000 existiert nicht]*/); //damit nicht alle geleichzeitg
IPS_SetScriptTimer($_IPS['SELF'],IPS_GetScriptTimer($_IPS['SELF'])+$Offset); //erneutes Wiederholungsintervall
}
else {
IPS_LogMessage("JSON RPC $Par_ID", "Auto-Repaet abbrechen $Par_ID"); //Wiederholung abbrechen
IPS_SetScriptTimer($_IPS['SELF'],0);
}
}
Goto Ende_Script;
}
}
IPS_SetScriptTimer($_IPS['SELF'],0);
Ende_Script:
?>
Ich war bei meiner ersten Analyse etwas „oberflächlich“.
Die PHP-Thread-Hänger lagen nicht an der IPS-Version sondern an der Firmware des PI. Hier ist scheinbar die aktuelle Version buggy - oder zumindest mit IPS INKOMPATIBEL.
bei dem Versuch, mein altes Kernel (3.12.29) zu aktualisieren, bleibt das Programm bei ‚syncing to disk‘ hängen. Ein reboot ist auch nicht mehr möglich. Werde morgen mal einen Monitor direkt an den raspi hängen. Vielleicht kommen da noch Meldungen.
bei 3.12.29 sollte vorher ein „apt-get update“ und „apt-get dist-upgrade“ laufen.
Ich habe mittlerweile meine Heizung direkt über einen PI2 mit IPS am laufen (ohne weitere externe Kopplung, alles direkt von GPIO’s, 1wire und Relaiskarte) , und den fasse ich immer erst an wenn Test-IPS auf dem einen PI keine mucken macht, oder halt Raspbian (Minibian!)…
habe auch das Problem das sich die IPS bei mir „aufhängt“ mit der Meldung:
22:55:00 | 00000 | MESSAGE | ScriptEngine | Too many scripts at once. Dropping execution...
22:55:00 | 00000 | MESSAGE | ScriptEngine | Too many scripts at once. Dropping execution...
22:55:00 | 00000 | MESSAGE | ScriptEngine | Too many scripts at once. Dropping execution...
22:55:00 | 00000 | MESSAGE | ScriptEngine | Too many scripts at once. Dropping execution...
22:55:00 | 00000 | MESSAGE | ScriptEngine | Too many scripts at once. Dropping execution...
22:55:00 | 00000 | MESSAGE | ScriptEngine | Too many scripts at once. Dropping execution...
22:55:00 | 00000 | MESSAGE | ScriptEngine | Too many scripts at once. Dropping execution...
22:55:00 | 00000 | MESSAGE | ScriptEngine | Too many scripts at once. Dropping execution...
22:55:00 | 00000 | MESSAGE | ScriptEngine | Too many scripts at once. Dropping execution...
22:55:00 | 00000 | MESSAGE | ScriptEngine | Too many scripts at once. Dropping execution...
22:55:00 | 00000 | MESSAGE | ScriptEngine | Too many scripts at once. Dropping execution...
22:55:00 | 00000 | MESSAGE | ScriptEngine | Too many scripts at once. Dropping execution...
Habe jetzt mal wie hier beschrieben in die „PHP Informationen“ gesehen und das hier schon festgestellt:
Ausführen kann man dieses mini Script ohne Problem, so kommt kurz auf einem Thread, und verschwindet wieder.
Nur hängt eins mit selbem Namen in Rot drin und bekomme dieses nicht mehr raus/weg?!?
Das passt aber „bisher“ nicht zusammen. Wenn die Fehlermeldungen auftreten muss alles rot sein. Und dann ist es spannend zu schauen, was dort klemmt.
Es kann sein, dass dein shell_exec festhängt. Nimm mal z.B. exec, welches nicht auf das Ende des Programms wartet. Der eigentliche Fehler wird eher in dem pilight-send liegen.
Hab es jetzt mal angepasst, den laufenden Thread bekam ich aber dennoch nur weg mit einem Neustart.
Werde das nächste mal rein sehen wenn die IPS wieder „hängt“.
Wann werden die Threads den automatisch abgeschossen wenn sie klemmen?