Absturz ReGa ab 3.53.30 bei hoher Belastung nach längerer Zeit: Could not create socket (error 24)

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

Michael K.
Beiträge: 38
Registriert: 05.02.2014, 22:10
Hat sich bedankt: 1 Mal
Danksagung erhalten: 4 Mal

Absturz ReGa ab 3.53.30 bei hoher Belastung nach längerer Zeit: Could not create socket (error 24)

Beitrag von Michael K. » 31.10.2020, 18:20

Ich habe seit 3.5.30 das Problem, dass sich die Rega regelmäßig veranschiedet. Ich bin nicht alleine (Link).

Mit der Unterstützung von @jens-maus habe die ReGa manuell gestartet und den Output mitgelogged. Nach 45 MB unauffällige logs ist unvermittelt folgendes passiert:

Code: Alles auswählen

[2020-10-31 05:13:48 CET] ERROR: Accept socket failed (errno=24)! [Accept():iseSysLx.cpp:1450]
[2020-10-31 05:13:48 CET] CRASH: Could not let the listener socket accept incoming traffic! {"HTTP-Listener"} [ThreadFunction():httpListener.cpp:135]
[2020-10-31 05:13:48 CET] Info: Thread 'HTTP-Listener' exited with return code 0. [ThreadProc():iseSysLx.cpp:1180]
terminate called without an active exception
[2020-10-31 05:13:48 CET] Info: IseSession GetSessionId from URL: /tclrega.exe [GetSessionId():iseSession.cpp:185]
Aborted
Es sieht so aus, wie wenn nicht ein spezielles Programm die Ursache wäre, sondern "irgendetwas" sich aufschaukel. Ich versuche jetzt das ganze weiter einzugrenzen und logge alle 15 Sekunden die Anzahl von lsof, netstat und ps jeweils vom System, Rega und lighttpd, sowie die Werte von free. Irgendeine Idee, was ich noch loggen sollte?

Was hat meine rasberrymatic, was andere nicht haben?
  • Sie stürzt regelmäßig (1-2x pro Tag) und zuverlässig ab, seit ich auf 5.3.53 upgegraded habe. Ich habe in zwischen die Vorversionen getestet, sie sind alle stabil - mit unveränderten Programmen.
  • Es ist nicht die SD Karte, es ist kein Gerät, das auffällig ist. Wenn ich auf 3.51.6.20200621 zurücksteige, ist alles stabil
  • Eine Besonderheit: Ich rufe alle 15 Sekunden (teilweise öfter) die /config/xmlapi/sysvarlist.cgi auf. Ist Teil meiner Visualisierung, und ich mache das seit Jahren so ohne Probleme. Erzeugt aber Last, die vielleicht andere nicht haben. Vielleicht beschleunigt das das Aufschaukeln?
  • Ich habe inzwischen fast alle Programme deaktiviert. Aktiv sind 6 Programme, die von zwei Homematic-Thermometer regelmäßig getriggert werden. Die Programme starten damit alle paar Minuten. Sie verhalten sich korrekt, funktionieren fachlich, und erzeugen keine Fehler im Log.
  • Die Programme enthalten Scripts, die u.a. mit dom.GetObject("WasserWarnung").Value() oder mit dom.GetObject("GH2 - Hüttenschloss").DPByHssDP("STATE").Value() Werte von Geräten ermitteln und entsprechend dann Systemvariable beschreiben (die zur Visualisierung dann über xmlapi ausgelesen werden). Ein Programm enthält system.Exec("wget -q -O /dev/null http://192.168.1.9:8080/refresh &", &stdout, &stderr); und das schon seit Jahren. Laut log gitb system.exec terminiert system.exec jeweils korrekt und mit rc=0. Ich habe das Programm jetzt trotzdem auch deaktiviert

Code: Alles auswählen

Ein weiteres Programm enthält insgesamt 3x [i]system.Exec("wget -q -O /dev/null -T 2 http://192.168.1.14/pw/sf/1/down &", &stdout, &stderr);[/i] zum Schließen der Somfy Rollos. Dies wird 1x am Abend aufgerufen, hat laut log funktioniert und die Rollos haben auch geschlossen.
Aktuell läuft gerade das Logging, ich warte auf den Absturz. Ideen, insbesondere wo ich sonst noch hinschauen könnte, sind gerne willkommen.

Benutzeravatar
jmaus
Beiträge: 7425
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 218 Mal
Danksagung erhalten: 814 Mal
Kontaktdaten:

Re: Absturz ReGa ab 3.53.30 bei hoher Belastung nach längerer Zeit: Could not create socket (error 24)

Beitrag von jmaus » 31.10.2020, 19:25

Wenn du dich traust kannst du gerne mal eine aktuelle developer snapshot version von RaspberryMatic testen. Dort ist die aktuellste ReGa-Version dabei die unter anderem einen Bugfix für die system.Exec() Version mitbringt die bei Nutzung des & in der aktuellen Version zu einer Zunahme von Zombie Prozessen führt. D.h. Wenn du exzessive auf die system.Exec() mit & setzt, dann könnte das eine Erklärung sein warum nach einer gewissen Zeit Instabilitäten auftreten, weil even die ProzessIDs ausgehen. Ein Versuch wäre es wert.
RaspberryMatic 3.59.6.20210703 @ ESXi, ~190 Hm-RF/HmIP-RF/HmIPW Geräte, ioBroker – RaspberryMatic GitHub Projekt / Twitter

Michael K.
Beiträge: 38
Registriert: 05.02.2014, 22:10
Hat sich bedankt: 1 Mal
Danksagung erhalten: 4 Mal

Re: Absturz ReGa ab 3.53.30 bei hoher Belastung nach längerer Zeit: Could not create socket (error 24)

Beitrag von Michael K. » 01.11.2020, 13:38

Ja, ich kann bestätigen, dass meine Probleme auf ReGa Zombies zurückzuführen sind. Der Wert von

Code: Alles auswählen

lsof | grep ReGa | wc -l
ist konstant geblieben, solange ich das Programm mit dem system.exec deaktiviert hatte. Wie ich das Programm dann aktiviert habe, ist der Wert beständig gestiegen, bis die ReGa dann mit error 24 ausgestiegen ist.

Teste jetzt den Snapshot

Michael K.
Beiträge: 38
Registriert: 05.02.2014, 22:10
Hat sich bedankt: 1 Mal
Danksagung erhalten: 4 Mal

Re: Absturz ReGa ab 3.53.30 bei hoher Belastung nach längerer Zeit: Could not create socket (error 24)

Beitrag von Michael K. » 01.11.2020, 15:06

Snapshot 3.53.34.20201101 installiert. Es ist leider keine Verbesserung.

Jede Ausführung von

Code: Alles auswählen

system.Exec("wget -q -O -T 2 /dev/null http://192.168.1.9:8080/refresh &", &stdout, &stderr);
erzeugt zwei zusätzliche Einträge bei

Code: Alles auswählen

lsof | grep ReGa
[...]
902     /bin/ReGaHss    pipe:[214328]
902     /bin/ReGaHss    pipe:[214328]
wohingegen ohne &

Code: Alles auswählen

system.Exec("wget -q -O -T 2 /dev/null http://192.168.1.9:8080/refresh", &stdout, &stderr);
keine neue Einträge erzeugt werden.

Benutzeravatar
jmaus
Beiträge: 7425
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 218 Mal
Danksagung erhalten: 814 Mal
Kontaktdaten:

Re: Absturz ReGa ab 3.53.30 bei hoher Belastung nach längerer Zeit: Could not create socket (error 24)

Beitrag von jmaus » 01.11.2020, 15:09

Michael K. hat geschrieben:
01.11.2020, 15:06
Snapshot 3.53.34.20201101 installiert. Es ist leider keine Verbesserung.

Jede Ausführung von

Code: Alles auswählen

system.Exec("wget -q -O -T 2 /dev/null http://192.168.1.9:8080/refresh &", &stdout, &stderr);
erzeugt zwei zusätzliche Einträge bei
Mach mal das &stdout und &stderr am Ende weg? was passiert dann?
RaspberryMatic 3.59.6.20210703 @ ESXi, ~190 Hm-RF/HmIP-RF/HmIPW Geräte, ioBroker – RaspberryMatic GitHub Projekt / Twitter

Michael K.
Beiträge: 38
Registriert: 05.02.2014, 22:10
Hat sich bedankt: 1 Mal
Danksagung erhalten: 4 Mal

Re: Absturz ReGa ab 3.53.30 bei hoher Belastung nach längerer Zeit: Could not create socket (error 24)

Beitrag von Michael K. » 01.11.2020, 15:21

Unverändert (also +2 bei &)

Benutzeravatar
jmaus
Beiträge: 7425
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 218 Mal
Danksagung erhalten: 814 Mal
Kontaktdaten:

Re: Absturz ReGa ab 3.53.30 bei hoher Belastung nach längerer Zeit: Could not create socket (error 24)

Beitrag von jmaus » 02.11.2020, 08:39

Michael K. hat geschrieben:
01.11.2020, 15:06
Snapshot 3.53.34.20201101 installiert. Es ist leider keine Verbesserung.

Jede Ausführung von

Code: Alles auswählen

system.Exec("wget -q -O -T 2 /dev/null http://192.168.1.9:8080/refresh &", &stdout, &stderr);
erzeugt zwei zusätzliche Einträge bei

Code: Alles auswählen

lsof | grep ReGa
[...]
902     /bin/ReGaHss    pipe:[214328]
902     /bin/ReGaHss    pipe:[214328]
wohingegen ohne &

Code: Alles auswählen

system.Exec("wget -q -O -T 2 /dev/null http://192.168.1.9:8080/refresh", &stdout, &stderr);
keine neue Einträge erzeugt werden.
So, nun habe ich mir das ganze nochmal etwas näher angeschaut und konnte es in der Tat selbst reproduzieren. Sehr guter Hinweis und Auswertung mit der "lsof" Ausgabe. Das hatte ich ganz übersehen gehabt das unter gewissen bedingungen diese Pipes zwar generiert, aber nicht geschlossen werden. Das könnte in der Tat die Probleme in der Langzeitstabilität erklären, weil dann ReGaHss ggf. über einen längeren Zeitraum die File Descriptoren ausgehen. Hab das Problem auch schon bereits intern hier korrigiert und die nächste ReGaHss (R1.00.0388.0226) sollte es beheben.

Was jedoch deinen wget Aufruf angeht, so habe ich da auch noch einen gewissen Verbesserungs bzw. Korrigieransatz. Besser/Richtiger/Sauberer wäre wenn du den wie folgt ausführen lässt:

Code: Alles auswählen

system.Exec("timeout 2 wget -q -O /dev/null -T 2 http://192.168.1.9:8080/refresh &");
Beachte dabei das "timeout 2" am Anfang und das "-O /dev/null " statt des "-O -T 2/dev/null" bzw. hattest du das /dev/null an einer falschen stelle positioniert. Gerade das "timeout 2" am anfang sollte helfen das wget nicht aus gewissen gründen niemals zurückkehrt (das -T 2 ist leider nicht für alles ein garant darauf das es max. 2 sekunden dauert).
RaspberryMatic 3.59.6.20210703 @ ESXi, ~190 Hm-RF/HmIP-RF/HmIPW Geräte, ioBroker – RaspberryMatic GitHub Projekt / Twitter

Baxxy
Beiträge: 3606
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 248 Mal
Danksagung erhalten: 611 Mal

Re: Absturz ReGa ab 3.53.30 bei hoher Belastung nach längerer Zeit: Could not create socket (error 24)

Beitrag von Baxxy » 02.11.2020, 09:51

Sorry für's reingrätschen... :oops:
Ich benutze auch häufige wget mit system.Exec Abfragen, hatte aber soweit noch keine Probleme damit.
Im Laufe der Zeit haben sich in meinen "Akten" diverse Schreibweisen gesammelt. Um hier mal Aufzuräumen und zu optimieren
würde ich deinen...
jmaus hat geschrieben:
02.11.2020, 08:39
Besser/Richtiger/Sauberer
Ansatz nun als aktuellen Stand der Dinge aufnehmen.
Somit würde ich zum Ansteuern meiner LCD's (keine Ausgabe erforderlich)...

Code: Alles auswählen

system.Exec("timeout 2 wget -q -O - -T 2 '" # clear # "' &");
... nutzen. Und zur Abfrage von Wetterdaten (Ausgabe erforderlich)...

Code: Alles auswählen

system.Exec("timeout 2 wget -q -O - -T 2 '" # owmurl #"'", &OWM_Rueckgabe);
Ist das aktuell soweit korrekt :?:

Benutzeravatar
jmaus
Beiträge: 7425
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 218 Mal
Danksagung erhalten: 814 Mal
Kontaktdaten:

Re: Absturz ReGa ab 3.53.30 bei hoher Belastung nach längerer Zeit: Could not create socket (error 24)

Beitrag von jmaus » 02.11.2020, 10:18

Baxxy hat geschrieben:
02.11.2020, 09:51
Ich benutze auch häufige wget mit system.Exec Abfragen, hatte aber soweit noch keine Probleme damit.
Im Laufe der Zeit haben sich in meinen "Akten" diverse Schreibweisen gesammelt. Um hier mal Aufzuräumen und zu optimieren
würde ich deinen...
jmaus hat geschrieben:
02.11.2020, 08:39
Besser/Richtiger/Sauberer
Ansatz nun als aktuellen Stand der Dinge aufnehmen.
Somit würde ich zum Ansteuern meiner LCD's (keine Ausgabe erforderlich)...

Code: Alles auswählen

system.Exec("timeout 2 wget -q -O - -T 2 '" # clear # "' &");
In der Tat sollte folgender Aufruf in diesem Falle besser sein:

Code: Alles auswählen

system.Exec("timeout 2 wget -q -O /dev/null -T 2 '" # clear # "' &");
D.h. man schmeisst die Ausgabe die das wget ggf. erzeugt nach /dev/null, also auf den Müll. Das erscheint mir aktuell die performanteste und sicherste Methode zu sein ein wget das keinerlei Rückgabedaten liefern soll aufzurufen und mittels "timeout" befehl sicherzustellen das dieser befehl auf der einen seite die ReGaHss nicht unnötig blockiert, sondern auch nicht für lange zeit hintergrundprozesse anlegt die auf etwas warte was nicht mehr kommen wird.
Baxxy hat geschrieben:
02.11.2020, 09:51
[/code]
... nutzen. Und zur Abfrage von Wetterdaten (Ausgabe erforderlich)...

Code: Alles auswählen

system.Exec("timeout 2 wget -q -O - -T 2 '" # owmurl #"'", &OWM_Rueckgabe);
Ist das aktuell soweit korrekt :?:
Ja, wenn du die Ausgabedaten in OWM_Rueckgabe haben willst sollte das so klappen.
RaspberryMatic 3.59.6.20210703 @ ESXi, ~190 Hm-RF/HmIP-RF/HmIPW Geräte, ioBroker – RaspberryMatic GitHub Projekt / Twitter

roe1974
Beiträge: 652
Registriert: 17.10.2017, 16:15
Wohnort: Wien
Hat sich bedankt: 32 Mal
Danksagung erhalten: 7 Mal

Re: Absturz ReGa ab 3.53.30 bei hoher Belastung nach längerer Zeit: Could not create socket (error 24)

Beitrag von roe1974 » 02.11.2020, 11:42

Ich verwende das timeout derzeit so .....

Code: Alles auswählen

system.Exec("wget --no-check-certificate --timeout=10 -O - '"#url#"'" , &srueck, &error);
d.h. das ist falsch ?

lg Richard

Antworten

Zurück zu „RaspberryMatic“