NEWS
CPU Auslastung des JavaScript Adapters steigt kontinuierlich
-
Hallo,
ich habe seit einigen Monaten das Problem, dass der JavaScript Adapter nicht mehr stabil läuft. Bisher habe ich mich damit beholfen, den Adapter alle 2-3 Tage neu zu starten, das nervt aber allmählich. Vorweg noch als Info, auch eine komplette Neuinstallation und anschließendes Restore des iobroker hat den Fehler nicht behoben. Der Fehler liegt also möglicherweise in einem Blockly-Skript das ich gebaut habe.
Ich zeichne seit gestern Abend mit SQL die CPU Auslastung des Javascript Adapters auf:
Die Auslastung steigt kontinuierlich an bis der Adapter bzw. die Skripte nach ca. 2 Tagen Laufzeit mit einer deutlichen Zeitverzögerung reagieren und schließlich gar nicht mehr funktionieren.
Wie geht ich da jetzt ran um den Fehler zu finden? Ich habe insgesamt 25 Skripte die teils auch etwas länger sind. Gibt es einige "übliche Verdächtige" für diesen Fehler? Kann mir jemand weiterhelfen wenn ich die Skripte hier poste?
Grüße
Michael -
@mfroeschl sagte in CPU Auslastung des JavaScript Adapters steigt kontinuierlich:
Wie geht ich da jetzt ran
50/50 Prinzip
Die Hälften der Scripte deaktivieren, beobachten, dann die andere Hälfte um sich so langsam ranzutasten welches der Scripte das Problem verursachen könnte.Irgendwelche gebauten Schleifen, nicht beendete timeouts können dies z.b verursachen
-
@mfroeschl sagte in CPU Auslastung des JavaScript Adapters steigt kontinuierlich:
Der Fehler liegt also möglicherweise in einem Blockly-Skript das ich gebaut habe.
nicht möglicherweise sondern BESTIMMT
schalte erstmal die Scripte aus die du im verdacht hast.. so wie @crunchip schon geschrieben hat
-
@crunchip Alles klar, ich versuche das fehlerhafte Skript nach der obigen Methode zu finden.
-
@crunchip said in CPU Auslastung des JavaScript Adapters steigt kontinuierlich:
Irgendwelche gebauten Schleifen,
Hab den Fehler gefunden. Ich habe bei einem längeren Blockly-Skript versehentlich einen Trigger in einem Trigger platziert. Dies führt dann scheinbar zu dem schleichendem Anstieg der CPU-Last bishin zum Absturz des Javascript Adapters.
Wäre vielleicht eine mögliche Verbesserung des Adapters wenn hier eine Warnung ausgegeben würde oder man irgendwie anderweitig darauf hinweist dass das so nicht möglich ist - zumal der Fehler erst nach Tagen des scheinbar fehlerfreien Betriebs auftritt.
Danke an euch für die Tipps zur Fehlersuche.
-
@mfroeschl
Bei blockly weiß ich nicht, aber bei JavaScript kann sowas durchaus möglich sein.
Da blockly intern auch wieder zu JavaScript übersetzt wird gilt das aber dennoch
Allerdings kann die js Engine von gewollt und nicht gewollt nicht unterscheiden
Problem ist der Entwickler ist dafür verantwortlich die Events aufzuräumen und auch den dafür verwalteten Speicher frei zu geben.Die beste Lösung dafür wäre, das der JavaScript Adapter je Script den verbrauchten Speicher und ggfs. auch den CPU Anteil je Script in datenpunkten aufzuzeichnen
Aktuell geht das nur für den gesamtspeicher des Adapters
Ich weiß leider nicht ob dies die zugrundeliegende Bibliothek vm2 das kann. -
@oliverio Trigger in Trigger kann ja eigentlich nicht gewollt sein. Ergibt ja irgendwie auch keinen Sinn?!
Gruss, Jürgen
-
@wildbill
hm mir würde da schon was einfallen.
du hast einen ein und Ausschalter
und nur wenn der an ist, dann willst du auf bestimmte datenpunkte horchen?klar kann man das auch anders lösen, dann müsste man auf jedes Ereignis der betroffenen datenpunkte horchen und prüfen ob der ein und Ausschalter gesetzt ist. wenn da aber sehr viele Ereignisse auftreten ist es ressourcenschonender wenn man den/die trigger erst mit EIN setzt.
Wenn man sorgsam ist, dann geht das schon.
viele node bibliotheken sind so programmiert
bspw siehe beispiel bei
https://nodejs.org/api/http.html#httprequesturl-options-callback
dort wird async der request eröffnet (1.trigger) und danach hörst du optional auf weitere trigger/events (data,error,end,etc)
daher musst du am ende auch noch end aufrufen um das alles wieder aufzuräumen.wie oben schon gesagt, weiß ich nicht wie sich das in blockly auswirkt bzw. wie man in blockly einen trigger wieder deaktiviert bzw. sorge dafür trägt, das man sich die trigger signatur merkt um sie wieder abzustellen.