habe selbiges Problem heute früh gehabt. Lt. Expertenansicht ist es ein Script, welches alle 10 min ausgeführt werden soll. Allerdings ist desse letzte Ausführung schon mehr als 9 Stunden her und trotzdem kann keine andere Aktion mehr ausgeführt werden. Es scheitert schon bei einem einfachen
phpinfo();
Wie kann man ein solches („Fehler-“) Script sauber stoppen, damit andere wieder ausgeführt werden können? Wie läßt sich das zudem automatisiert feststellen sowie wieder richten, sodass man nicht z.B. am fernen Urlaubsort damit „überrascht“ wird, dass zu Hause die Jalousien ständig geschlossen bleiben?
07/28/18 07:04:30 | 00000 | MESSAGE | ScriptEngine | Zu viele gleichzeitige Skripte. Verwerfe Ausführung...
bei meinem IPS 4.4 gesehen. Das kann dann alle paar Minuten immer wieder (bis zu dem Neustart gerade). U diese Meldungen herum stand nix, was einen Hinweis auf das auslösende Script zulassen würde.
Thread Count ist auf Standard (also 10), die Hardware ist eine raspi 3. Und hier ist nach den Imitationen auch bei 10 Tasks Schluss (wegen dem 1 GB RAM). ThreadQueueLimit steht auf 50.
Der Raspi bedient nur IPS, war nicht ausgelastet (CPU 5…20%), es gab also keinen Systembedingten Engpass.
Änderungen an dem ProdSys habe ich seit ca. 14 Tagen nicht mehr gemacht. Ich bin mir auch nicht bewusst, Script zu haben, die auf irgendetwas besonders lange warten, kann das aber natürlich nicht ausschliessen.
Leider war es nicht mehr möglich, auf die Verwaltungskonsole zu öffnen, also konnte ich nicht in die PHP-Information schauen.
Ich habe das IPS mit ‚sudo kill -9 …‘ abgebrochen und neu gestartet.
Für den Fall das das nochmal auftritt: kann man auch anders als mit der PHP-Information sich eine Übersicht über die Prozesse verschaffen, also ohne die Verwaltungskonsole zu starten?
Kann man irgendwo nachschauen, wie weit die ThreadQueue verwendet wird?
Prima, damit kann ich mir zyklisch eine Liste erzeugen und im Filesystem speichern (oder als LogMessage). Damit hätte ich Chancen, eventuellen Hängern auf die Spur zu kommen.
Ich habe es einmal gehabt, dass mir das System vollgelaufen ist.
Ich lasse seitdem zyklisch IPS_GetThreadList laufen und prüfe dort, wann die Threads gestartet sind. Wenn ein Thread beispielsweise länger als 2 Minuten läuft, ist davon auszugehen, dass dies nicht normal ist. Ich zähle die Anzahl dieser Threads und begebe mich somit in verschiedene Warnstufen, die unterschiedliche Benachrichtigungen auslösen. In den letzten Warnstufen werden dann die Bewohner des Hauses informiert, dass einige Dinge ggf. nur noch sehr langsam bzw. zeitverzögert laufen. In der allerletzten Warnstufe verabschiedet sich IP-Symcon brav.
Das alles hat bisher zum Glück erst einmal angeschlagen, hatte aber einen sehr hohen WAF.
Ich habe zwei Skripte. Eins, welches die Threads überprüft und ein zweites, welches mich benachrichtigt. Wenn ich mir das gerade so anschaue, dann hätte man das alles auch in ein Skript packen können.
Es ist ja jetzt keinem geholfen, wenn ich das Skript verschicke. Grundzüge des Skriptes, also z.B. IPS_GetThreadLIst oder das Herausfinden der Startzeit des Skriptes, sind ja schon in Beitrag 7 enthalten.
Es wäre also allen Beteiligten besser geholfen, wenn man hier mal aufzeigt, was an den eigenen Versuchen, so ein Skript zu erstellen, bisher nicht funktioniert hat und man dann gemeinsam eine Lösung entwickelt.