Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. [Gelöst] Speicherlecks im ioBroker?

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    SOLVED [Gelöst] Speicherlecks im ioBroker?

    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      klassisch Most Active @LoxDUS last edited by klassisch

      @LoxDUS sagte in Speicherlecks im ioBroker?:

      Wie löst ihr das in euren Programmen wenn ihr retriggerbare Timer für z.B. Lichter im Treppenhaus die nach einer gewissen Zeit wieder ausgehen sollen, aber immer wieder neu getriggert werden sollen?

      1. Die direkte Antwort wird Dir nicht gefallen: Ich nutze das z.B. in der Küche mit Retriggerung durch einen Bewegungsmelder.
        Aber da habe ich einen Shelly Schalter verbaut und bürde diesem die Timeraufgabe auf. Der wird so konfiguriert, daß er nach x Minuten ausgeht. Wird Bewegung erkannt, dann sende ich ihm wieder ein Einschaltsignal. Das geht bei den Shelly gut, weil WiFi und damit spielt der Traffic (häufiges "unnötiges" Einschalten) keine so große Rolle. Bei Homematic wäre das nicht so gut.
        Edit: Dieser Teil der antwort mag lieblos klingen, ist aber so nicht gemeint. Ansteuerbare Aktoren haben meist eine auto-timout Funktion und die wird dann auch generell genutzt. Und wenn sie auf z.B. 8h gesetzt wird. Schadensbegrenung bei vergessenen Lichtern.

      2. Die folgende Antwort geht eher in die von Dir intendierte Richtung:
        Wo ich keine HW-Unterstützung habe, verwende ich etliche Watchdogs, all nach dem Strickmuster von @paul53 siehe dort: https://forum.iobroker.net/topic/8961/watchdog-fuer-sensoren-in-js-millis-odertimer-gesucht/2

      L 1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO @LoxDUS last edited by

        @LoxDUS
        parallel kannst du mal den artikel lesen. insbesondere den abschnitt mit timers und callbacks.
        evtl hast du da in deinen skripten etwas davon eingebaut.
        https://auth0.com/blog/four-types-of-leaks-in-your-javascript-code-and-how-to-get-rid-of-them/

        L 1 Reply Last reply Reply Quote 0
        • L
          LoxDUS @klassisch last edited by

          @klassisch
          Danke für die Antwort. Als Aktoren benutze ich einige Homematic Wired IO Module die keinerlei Zusatzfunktionen wie Timer o.ä. haben. Am Anfang hatte ich nur diese Wired Module. Auch die Javascripte waren in ioBroker noch überschaubar. Mit der Zeit sind dann verschiedenste Sensoren über Zigbee, Wlan und dem Funk-Homatic dazugekommen. Das sind dann die Bewegungsmelder die mittlerweile in jedem Flur oder Bad/WC in den Ecken kleben oder eben Temperatur/Luftfeuchtigkeit und Luftdrucksensoren.
          Mit diesen Sensoren sind dann auch die Javascripte bei mir immer komplexer geworden weil ich versucht habe jede Anmerkung der Familie ( "...Morgens soll die Zeit Licht-An-Zeit im Treppenhaus länger sein als Nachmittags..." usw.) irgendwie in die "Intelligenz" des Hauses einzuarbeiten. - Und genau das habe ich anscheinend in diesem Jahr total übertrieben (Man war ja mehr Zuhause 🙂 ...
          In vielen Fällen, wo ich Timer nutze mache ich das Ähnlich wie in dem von Dir geposteten Link beschrieben - Bis auf dsa ich bei einem clearTimeout() vorher nicht prüfe ob noch ein gültiges Objekt da hinterlegt ist (der Timer also noch läuft).
          Ich gehe jetzt durch meine Scripte und räume da mal auf. Dann sollte ich die Speicherlecks, die ich eingebaut habe, hoffentlich wegbekommen.

          Viele Grüße,

          Artur

          K 1 Reply Last reply Reply Quote 0
          • K
            klassisch Most Active @LoxDUS last edited by

            @LoxDUS Ja, die alten HM-wired Geräte sind schon recht basic. Aber so lange sie laufen....

            [Teils-OT]
            Ja, das Optimierungsthema treibt uns um - sonst würde wir wohl nicht automatisieren. Als Vorschulbub hatte ich mal einen Unimog mit Anhänger, so ca. 4cm lang die einzelnen Teile. Aber damals eines meiner vornehmsten Spielzeuge, war halt eine andere Zeit. Zwischen Unimog und Hänger gab es eine Kupplung. Eine einfache Blechzunge. Manchmal hat die etwas geklemmt. Die habe ich so gebogen, daß sie viel besser ging. Aber noch nicht ganz perfekt. Also weiter gebogen und justiert. Bis die Blechzunge ab war. Eine damals sehr schmerzhafte, aber langfristig wertvolle Lehre fürs Leben: Irgendwann wird Optimierung kontraproduktiv. Seither beschäftigt mich immer die Frage "angemessen, gut genug?"
            Manchmal hat das Wort "fertig" was befreiendes 🙂

            L 1 Reply Last reply Reply Quote 2
            • L
              LoxDUS @klassisch last edited by

              @klassisch
              100%ige Zustimmung 😉
              Ich hoffe das nach den Aufräumarbeiten in den Javascripten auch alles wieder stabil läuft.

              1 Reply Last reply Reply Quote 0
              • OliverIO
                OliverIO @LoxDUS last edited by

                @LoxDUS
                Ich selbst habe ganz wenig Skripte.
                Allerdings verwende ich in meinen Adapter einige Timer.
                Das wichtigste ist, alle Timer nach Gebrauch oder auch beim beenden des programs/Skript aufzuräumen
                Dadurch sorgst du, das Objekte oder Funktionen, die an den Timer gebunden sind, definitiv in den timerfunktionen aufgeräumt werden und zumindest dort keine Referenzen mehr existieren.

                Hier mal noch ein weiterer Artikel auch mit ein paar Code Beispielen.
                https://blog.appsignal.com/2020/05/06/avoiding-memory-leaks-in-nodejs-best-practices-for-performance.html

                L 1 Reply Last reply Reply Quote 0
                • L
                  LoxDUS @OliverIO last edited by

                  @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.
                  83a03b7d-c28e-419e-aebc-2f3f0a2daed5-image.png

                  d8d890bb-8d35-4488-b66e-2ed5a1ec2403-image.png
                  (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

                  K 1 Reply Last reply Reply Quote 2
                  • K
                    klassisch Most Active @LoxDUS last edited by

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

                    Homoran 1 Reply Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators @klassisch last edited by

                      @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

                      K 1 Reply Last reply Reply Quote 0
                      • K
                        klassisch Most Active @Homoran last edited by

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

                        Homoran 1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators @klassisch last edited by

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

                          1 Reply Last reply Reply Quote 0
                          • a200
                            a200 @Thomas Braun last edited by

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

                            Thomas Braun 1 Reply Last reply Reply Quote 0
                            • Thomas Braun
                              Thomas Braun Most Active @a200 last edited by

                              @a200 Hier wird nix in hibernate geschickt, von daher für mich entbehrlich.

                              L 1 Reply Last reply Reply Quote 0
                              • L
                                LoxDUS @Thomas Braun last edited by

                                Ich werde wahnsinnig !!!
                                Habe gerade nochmal in den Speicherverbrauch reingeschaut:

                                2af98b57-21f2-477f-a882-6ea346c7b707-image.png
                                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.

                                40820fb4-cf70-41bb-b225-c6f1bfea2dc5-image.png

                                Ich werde ioBroker jetzt nochmal neu starten und mir die Speicherverläufe der nächsten Tage nochmal ansehen.

                                K liv-in-sky Dr. Bakterius 3 Replies Last reply Reply Quote 0
                                • K
                                  klassisch Most Active @LoxDUS last edited by

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

                                  1 Reply Last reply Reply Quote 0
                                  • liv-in-sky
                                    liv-in-sky @LoxDUS last edited by

                                    @LoxDUS

                                    nur zur info:

                                    https://www.linuxatemyram.com/

                                    1 Reply Last reply Reply Quote 0
                                    • Dr. Bakterius
                                      Dr. Bakterius Most Active @LoxDUS last edited by

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

                                      L 1 Reply Last reply Reply Quote 0
                                      • L
                                        LoxDUS @Dr. Bakterius last edited by

                                        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.

                                        791e89bb-0036-450d-8e8b-f619b8633633-image.png

                                        Schalte jetzt im Tagesabstand die einzelnen "Komfort" Scripte wieder ein um zu sehen ob sich was am Speicher tut.

                                        .... to be continued ....

                                        L 1 Reply Last reply Reply Quote 0
                                        • L
                                          LoxDUS @LoxDUS last edited by

                                          Endstand 31.12.2020, 22:38Uhr:

                                          Es läuft wieder alles stabil.
                                          3732258b-5f82-4893-a049-e24f1859ee8a-image.png
                                          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 🙂

                                          4f95db21-1d73-48eb-97c1-523c83abb6b3-image.png
                                          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

                                          1 Reply Last reply Reply Quote 1
                                          • First post
                                            Last post

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          1.2k
                                          Online

                                          31.7k
                                          Users

                                          79.7k
                                          Topics

                                          1.3m
                                          Posts

                                          adapter speicherverbrauch speicherverbrauch
                                          10
                                          51
                                          3189
                                          Loading More Posts
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          The ioBroker Community 2014-2023
                                          logo