Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Adapter frisst Speicher

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Adapter frisst Speicher

    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      Karl_999 last edited by

      Heute habe ich meinen Adapter einmal einem kleinen Stresstest unterworfen und den Speicherverbrauch beobachtet.

      top sagt mir, dass in einer Stunde der unter VIRT gemeldete Speicher um ca. 1MByte gestiegen ist (von ca.130.000 auf 131.000).

      Das ist natürlich unschön und ich würde gerne die Ursache finden und beheben.

      Der Adapter läuft als Dämon und pollt zyklisch externe Werte.

      Dazu nehme ich folgendes Konstrukt (habe ich aus dem Solarlog-Adapter entnommen)

      adapter.on('ready', function() {
      
      	adapter.subscribeStates('disablePeriod');    
      	adapter.log.debug('[INFO] Starting adapter');
      
          let pollingTime = (adapter.config.pollCycle * 1000) || 300000;
      
          adapter.log.debug('[INFO] Configured polling cycle: ' + pollingTime);
      	if (!polling) {
      		polling = setTimeout(function repeat() { // poll states every [30] seconds
      			main();
      			setTimeout(repeat, pollingTime);
      		}, pollingTime);
      	};
      });
      
      

      Meine js-Erfahrungen sind nicht so wahnsinnig toll ausgeprägt.

      Wenn ich dieses Konstrukt am Ende betrachte, so ist das doch ein rekursiver Aufruf, der zunächst nach dem Timeout main() aufruft und danach wieder nach dem Timeout sich selbst und danach nach dem Timeout …

      Ansonsten wäre das Programm ja auch nach kurzer Zeit am Ende angelangt.

      Wenn das so wäre, dann kann ich mir den Effekt des wachsenden Speicherbedarfs natürlich erklären.

      Liege ich da richtig?

      Falls ja, wie macht man diese Poll-Schleife denn "richtig"?

      1 Reply Last reply Reply Quote 0
      • J
        JoJ123 last edited by

        Warum machst du den Adapter nicht so, dass er die Daten beim Ausfuhren einmal abruft und nutzt dann die Zyklische Ausführung die für jede Instanz einstellbar ist?

        Gesendet von meinem EML-L09 mit Tapatalk

        1 Reply Last reply Reply Quote 0
        • K
          Karl_999 last edited by

          Anfänglich hatte ich den Adapter als Schedule implementiert.

          Das hatte auch problemlos geklappt und vermeidet ein solches Problem.

          Allerdings kann ich dann den Adapter nur schwer steuernd nutzen (Absetzen von Kommandos).

          Dazu muss er einfach als Daemon laufen, um auf Ereignisse in vernünftiger Zeit reagieren zu können.

          Ich vermute, dass dieses Anforderung sicher viele Adapter haben: Reaktion auf Kommandos und (mehr oder weniger) zyklisches Lesen von Daten.

          1 Reply Last reply Reply Quote 0
          • J
            JoJ123 last edited by

            Du könntest auch setInterval verwenden, aber ob das wirklich besser ist weiß ich nicht genau.

            Gesendet von meinem EML-L09 mit Tapatalk

            1 Reply Last reply Reply Quote 0
            • apollon77
              apollon77 last edited by

              setInterval ist Problematisch wenn externe Kommunikation stattfindet. setTimeout ist besser weil erst der nächste Zyklus geplant wird wenn der davor wirklich fertig ist.

              Aber mal zurück zum "Problem": Wo ist das eigentlich? EIne Stunde reicht nicht um hier Dinge zu testen. nodejs macht Garbage collection wie es will bzw wie es nötig ist, also erstmal alles ok.

              Weiterhin: Welche nodejs version? ALles <8.12 hat ein memory Leak 🙂

              Das beste ist mal auf die heap/rss Datenpunkte unter system.adapter.name.x ein Logging (History(SQL/Influxdb) zu setzen und dann mal nach nem Tag mit Last zu schauen 🙂

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

              Support us

              ioBroker
              Community Adapters
              Donate

              778
              Online

              31.6k
              Users

              79.4k
              Topics

              1.3m
              Posts

              3
              5
              462
              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