Absturz innerhalb von 10Minuten nach erstmaligem "Too many scripts at once...."

Hallo,

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.

Ciao
herbertf

Hallo,

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.

Gruß,
gucky

Könntest du mir erklären wie ich das mache ?

:smiley:

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).

Grüße,
Chris

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.

… vermutlich die Konsole nicht mehr bedienen können ;-))) … - ich werde bei nochmaligem Auftreten mich aber Melden!

Achso :smiley: gucky meinte wohl, wie ich auch, dass du allgemein mal die Scripte beobachtest, ob da etwas auffällig ist :smiley:

Grüße,
Chris

Hi,

da war es wieder - wieder auf dem gleichen RASPBERRY - die anderen 5 haben das gleiche Script, aber keine Probleme:

Im „verursachenden“ Script steht:

$Temp=exec("cat /sys/class/thermal/thermal_zone*/temp");
SetValue(IPS_GetParent($_IPS['SELF']),$Temp/1000);

Ich habe jetzt noch ein:

ini_set('max_execution_time', 10);

hinzugefügt.

Der Fehler zeigt sich wie folgt:

Mit sudo killall php kann ich alle php-Threads killen. IPS lässt sich aber nicht mittels

sudo /etc/init.d/symcon restart

starten/stoppen.

Dann erscheint im IPS_log:

06:16:50 | 00000 | MESSAGE | ScriptEngine | Waiting for timer threads to finish…
06:16:51 | 00000 | MESSAGE | ScriptEngine | Waiting for timer threads to finish…
06:16:52 | 00000 | MESSAGE | ScriptEngine | Waiting for timer threads to finish…
06:16:53 | 00000 | MESSAGE | ScriptEngine | Waiting for timer threads to finish…
06:16:54 | 00000 | MESSAGE | ScriptEngine | Waiting for timer threads to finish…

herbertf

Hallo herbertf,

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.

Gruß,
gucky

Hi,

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.

Ciao

herbertf

Betrifft es immer noch nur die Skripte die ein exec beinhalten?

paresy

Hi Paresy,

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:
?>

Ciao Herbert

Hi,

Sorry Paresy - es tut mir leid.

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.

Ich bin über diese Seite Firmware- und Kernel-Update mit rpi-update beim Raspberry Pi mittels dieses Befehls:

sudo rpi-update 608c3b3e994e086d400f77469682ff1e8f346e27

wieder auf die funktionierende Firmware vom 29.09. gegangen.

Hoffentlich hilft die Info jemanden … und auf allen PIs und mit allen IPS-Versionen herrscht wieder Frieden ;-)))))))))))))

Ciao Herbertf

Hi,

kämpfe auch gerade mit dem Problem, hatte 4.1.13-v7+ drauf seit dem 20.12.
Bin jetzt auf 4.1.15-v7+ und es scheint wieder zu gehen.

So, einige Stunden später, immer noch kein hängendes PHP Skript, lag an dem Kernel 4.1.13-v7+ .
Ich nutze ab und an mal :

auf meinen Pi’s.

Ich denke in Zukunft sollten wir das bei Fehlern in IPS mit beachten (Kernelversion), denn nicht alle BUG’s kommen von IPS.:smiley:

Hallo Thomas,

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.

Grüße, Gerhard

Mein Fehler Gerhard,

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!)…

Hi,

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.

paresy

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?

Nie. Das ist nicht möglich, da wenn diese hängen, irgendetwas nicht in Ordnung ist.

paresy