NEWS
SOLVED [Gelöst] Speicherlecks im ioBroker?
-
@OliverIO
Ich habe jetzt meine Scripte komplett aufgeräumt. Dabei ist mir aufgefallen das ich an vielen Stellen gerade die ganzen Timerobjekte nicht vernünftig mit clearTimeout() aufgeräumt habe. So habe ich glaube ich viele Objekte ins Nirvana geschickt und dort haben die sich im Speicher festgebissen.Ich habe jetzt alle Scripte wieder am laufen und der Speicher dümpelt seit Stunden mit 66% frei vor sich hin.
(Die große Lücke kommt daher weil der SQL Datenbank zwischenzeitlich ausgestiegen ist weil ich den ioBroker neu gestartet hatte)Vielen Dank nochmal für die nützlichen Hinweise.
Viele Grüße,
Artur
-
@LoxDUS vielen Dank für die schöne Aufarbeitung und die Rückmeldung.
Jetzt habe ich wenigstens eine Ahnung davon, was das clearTimeout soll. Habe das bisher nur nachgeplappert. Allerdings wohl auch nicht so streng, in manchen Skripten fehlt es noch. Da muß ich wohl nochmals ran. -
@klassisch sagte in Speicherlecks im ioBroker?:
Jetzt habe ich wenigstens eine Ahnung davon, was das clearTimeout soll.
das Problem ist, dass wenn der Timeout öfters gestartet wird kann ein clear timeout den Timeout nicht mehr stoppen, weil ja mehrere laufen
-
@Homoran Bei mir waren es Zeitverzögerungen ("Monoflops"), die allerdings nur selten gestartet wurde. einmal am Tag, einmal alle paar Tage oder Wochen. Bei 8GB merkt man da nichts.
-
@klassisch sagte in Speicherlecks im ioBroker?:
Bei 8GB merkt man da nichts.
entscheidend ist, dass
@klassisch sagte in Speicherlecks im ioBroker?:
allerdings nur selten gestartet wurde
Und damit die Wahrscheinlichkeit, dass der Timeout vor dem nächsten Aufruf beendet ist, gegen 100% geht.
-
@Thomas-Braun sagte in Speicherlecks im ioBroker?:
@a200 Ja, in alten Zeiten war das mal die Faustregel. Mach ich aber bei Systemen mit mehr als 2GB RAM nicht mehr.
Na dann viel Spaß mit hibernate, vor allem dann, wenn du neben swap nur noch eine Partition für dein FS nutzt.
-
@a200 Hier wird nix in hibernate geschickt, von daher für mich entbehrlich.
-
Ich werde wahnsinnig !!!
Habe gerade nochmal in den Speicherverbrauch reingeschaut:
Nach der Überarbeitung der Scripte ist es zwar viel ruhiger geworden im Vergleich zu den Speicheraktivitäten (siehe ganz oben in diesem Thema) noch vor ca. 2 Tagen, nun fällt aber auf das der Speicher insgesamt also nicht nur der io.Javascript sondern auch z.B. der shelly, der systeminfo, eigentlich quasi alle Instanzen immer mehr Speicher brauchen. Der Trend geht bei nahezu allen Instanzen der verschiedenen Adaptern nach oben (wenn auch nur sehr langsam).Vielleicht mache ich mich da ja auch verrückt und Linux holt sich gerade viele Dinge in seinen Speicher rein damit sich die Prozesse wohlfühlen aber ich werde schon wieder nervös wenn ich sehe das mein Speicher wieder nur zu ca. 27% frei ist.
Ich werde ioBroker jetzt nochmal neu starten und mir die Speicherverläufe der nächsten Tage nochmal ansehen.
-
@LoxDUS Warte es einfach mal ab. Wie oben schon geschrieben, bei meinem Windows-ioBroker System geht es immer auf und ab.
Ist zwar Win, aber andere werden das Speichermanagement auch nicht so viel anders machen. Man macht es sich erst mal einfach und nimmt was da da ist, solange noch was da ist. Wenn es eng wird, dann wird man aktiv und räumt auf. -
-
@LoxDUS sagte in Speicherlecks im ioBroker?:
Der Trend geht bei nahezu allen Instanzen der verschiedenen Adaptern nach oben (wenn auch nur sehr langsam).
Das ist normal. Bei mir steigt der RAM-Bedarf über zwei Tage an und bleibt dann auf etwa diesem Niveau.
-
Kurzer Zwischenstand:
Habe nach dem Neustart gestern Morgen nochmal alle "Komfort" Scripte abgeschaltet, eine Instanz (systeminfo.0) deaktiviert und mein Hausdisplay (ist ein Raspberry mit Chrome und angeschlossenem Display wo über VIS die Anzeige bereitgestellt wird) abgeschaltet. (Habe da so eine Vermutung....)
Seit ca. 24h dümpelt der freie Speicher zwischen 64 und 66% rum.Schalte jetzt im Tagesabstand die einzelnen "Komfort" Scripte wieder ein um zu sehen ob sich was am Speicher tut.
.... to be continued ....
-
Endstand 31.12.2020, 22:38Uhr:
Es läuft wieder alles stabil.
Der freie Speicher hat sich zwischen 64 und 66% eingependelt.
Die Javascripte laufen alle und meine javascript Instanz hat sich auf eine feste Speicherauslastung eingelassen
Ich habe tatsächlich noch in einem Skript einen setTimeout() und clearTimeout() Fehler gefunden.Mein FAZIT:
-
Das Know-How hier im Forum ist extrem hoch.
-
Die Verwendung von setTimeout(), setIntervall() sollte mit bedacht gewählt werden. Vielleicht werden durch ein Event/Trigger immer wieder neue Timer-Objekte angelegt und die zuvor angelegten Objekte sind als nicht mehr erreichbare Referenz irgendwo im Speicher sodass auch der Garbage Collector sie nicht mehr finden kann. Immer hinterfragen ob ggf. mit einem clearTimeout() oder clearIntervall() erzeugte Objekte (die Callbackfunktionen) gelöscht werden müssen.
https://auth0.com/blog/four-types-of-leaks-in-your-javascript-code-and-how-to-get-rid-of-them/ war ein guter Ansatzpunkt.
Viele Grüße und einen hervorragenden Start ins Jahr 2021!
Artur
-