Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Memory Heap Error bei einfacher Schleife

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    829

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Memory Heap Error bei einfacher Schleife

Geplant Angeheftet Gesperrt Verschoben JavaScript
7 Beiträge 5 Kommentatoren 351 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Dilldappe-ioD Offline
    Dilldappe-ioD Offline
    Dilldappe-io
    schrieb am zuletzt editiert von
    #1

    Hallo,
    hat jemand eine Idee, warum die einfache Schleife einen Speicherfehler verursacht?

    // Falls Fenster offen - Lampe leuchten lassen
    on({id: "zigbee.0.00124b002226d274.opened"/Is open/, change: "ne"}, async function (obj) {
    var value = obj.state.val;
    var oldValue = obj.oldState.val;
    if ((obj.state ? obj.state.val : "") == true) {
    while ((obj.state ? obj.state.val : "") == true) {
    setState("zigbee.0.7cb03eaa00a8b21c.state"/Switch state/, true);
    setState("zigbee.0.7cb03eaa00a8b21c.color"/Color/, '#ff0000');
    setStateDelayed("zigbee.0.7cb03eaa00a8b21c.state"/Switch state/, false, 10000, false);
    }
    }

    Ich meine, ich zähle ja nicht mal, geschweige dann, daß das ein Chuck Norris Skript ist, welches bis unendlich zählen kann (2x)
    Es handelt sich um einen Fenstersensor der "true" oder "false" zurückgibt. Ohne die Schleife funktioniert das Ganze und in der
    Schleife schaue ich nur, ob das Fenster immer noch auf ist. Ich habe es auch mit dem setzen einer Variablen versucht, das gleiche Ergebnis

    Caught by controller[0]: <--- Last few GCs --->
    Caught by controller[0]: [17795:0x5786868] 2026918 ms: Mark-sweep (reduce) 212.5 (216.9) -> 212.4 (217.2) MB, 2366.1 / 0.0 ms (average mu = 0.204, current mu = 0.002) allocation failure scavenge mi
    Caught by controller[0]: [17795:0x5786868] 2029196 ms: Mark-sweep (reduce) 212.9 (215.7) -> 212.7 (216.4) MB, 2272.5 / 0.0 ms (average mu = 0.109, current mu = 0.002) allocation failure scavenge mi
    Caught by controller[0]: <--- JS stacktrace --->
    Caught by controller[1]: FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory
    instance system.adapter.javascript.0 terminated due to SIGABRT
    instance system.adapter.javascript.0 terminated with code NaN ()
    Restart adapter system.adapter.javascript.0 because enabled

    Vielen Dank im Voraus

    RPi 4 mit Raspbian
    Node.js 14.15.5
    js-Controller 3.2.16

    paul53P 1 Antwort Letzte Antwort
    0
    • Dilldappe-ioD Dilldappe-io

      Hallo,
      hat jemand eine Idee, warum die einfache Schleife einen Speicherfehler verursacht?

      // Falls Fenster offen - Lampe leuchten lassen
      on({id: "zigbee.0.00124b002226d274.opened"/Is open/, change: "ne"}, async function (obj) {
      var value = obj.state.val;
      var oldValue = obj.oldState.val;
      if ((obj.state ? obj.state.val : "") == true) {
      while ((obj.state ? obj.state.val : "") == true) {
      setState("zigbee.0.7cb03eaa00a8b21c.state"/Switch state/, true);
      setState("zigbee.0.7cb03eaa00a8b21c.color"/Color/, '#ff0000');
      setStateDelayed("zigbee.0.7cb03eaa00a8b21c.state"/Switch state/, false, 10000, false);
      }
      }

      Ich meine, ich zähle ja nicht mal, geschweige dann, daß das ein Chuck Norris Skript ist, welches bis unendlich zählen kann (2x)
      Es handelt sich um einen Fenstersensor der "true" oder "false" zurückgibt. Ohne die Schleife funktioniert das Ganze und in der
      Schleife schaue ich nur, ob das Fenster immer noch auf ist. Ich habe es auch mit dem setzen einer Variablen versucht, das gleiche Ergebnis

      Caught by controller[0]: <--- Last few GCs --->
      Caught by controller[0]: [17795:0x5786868] 2026918 ms: Mark-sweep (reduce) 212.5 (216.9) -> 212.4 (217.2) MB, 2366.1 / 0.0 ms (average mu = 0.204, current mu = 0.002) allocation failure scavenge mi
      Caught by controller[0]: [17795:0x5786868] 2029196 ms: Mark-sweep (reduce) 212.9 (215.7) -> 212.7 (216.4) MB, 2272.5 / 0.0 ms (average mu = 0.109, current mu = 0.002) allocation failure scavenge mi
      Caught by controller[0]: <--- JS stacktrace --->
      Caught by controller[1]: FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory
      instance system.adapter.javascript.0 terminated due to SIGABRT
      instance system.adapter.javascript.0 terminated with code NaN ()
      Restart adapter system.adapter.javascript.0 because enabled

      Vielen Dank im Voraus

      RPi 4 mit Raspbian
      Node.js 14.15.5
      js-Controller 3.2.16

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @dilldappe-io sagte:

      while ((obj.state ? obj.state.val : "") == true) {
      

      erzeugt eine Endlosschleife.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      Dilldappe-ioD 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @dilldappe-io sagte:

        while ((obj.state ? obj.state.val : "") == true) {
        

        erzeugt eine Endlosschleife.

        Dilldappe-ioD Offline
        Dilldappe-ioD Offline
        Dilldappe-io
        schrieb am zuletzt editiert von
        #3

        @paul53 naja, solange wie das Fenster eben auf ist bzw. der Kontakt eben "true" ist. Wenn das Fenster geschlossen wird, dann endet natürlich die Schleife, wenn nicht vorher js abstürzen würde
        fm.JPG

        AlCalzoneA AsgothianA 2 Antworten Letzte Antwort
        0
        • Dilldappe-ioD Dilldappe-io

          @paul53 naja, solange wie das Fenster eben auf ist bzw. der Kontakt eben "true" ist. Wenn das Fenster geschlossen wird, dann endet natürlich die Schleife, wenn nicht vorher js abstürzen würde
          fm.JPG

          AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          schrieb am zuletzt editiert von
          #4

          @dilldappe-io Deine Endlosschleife sorgt für den Absturz.

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          1 Antwort Letzte Antwort
          0
          • Dilldappe-ioD Dilldappe-io

            @paul53 naja, solange wie das Fenster eben auf ist bzw. der Kontakt eben "true" ist. Wenn das Fenster geschlossen wird, dann endet natürlich die Schleife, wenn nicht vorher js abstürzen würde
            fm.JPG

            AsgothianA Offline
            AsgothianA Offline
            Asgothian
            Developer
            schrieb am zuletzt editiert von
            #5

            @dilldappe-io sagte in Memory Heap Error bei einfacher Schleife:

            naja, solange wie das Fenster eben auf ist bzw. der Kontakt eben "true" ist. Wenn das Fenster geschlossen wird, dann endet natürlich die Schleife, wenn nicht vorher js abstürzen würde

            Nein, tut sie nicht.

            Was da im Hintergrund passiert ist:

            • der Trigger wird aktiviert - dabei wird eine (temporäre) variable erstellt die die entsprechenden Daten beinhaltet (alten wert, neuen wert, etc)
            • dann läuft die "while" schleife synchron los
            • da du immer auf "variable=true" vergleichst, und innerhalb der Schleife den Wert der Variable nicht veränderst ist das eine Endlosschleife.
            • wenn der Trigger nocheinmal aktiv wird wird eine neue (temporäre) variable erzeugt, nicht die bestehende Variable angepasst.

            Was soll das machen ? Ein Blinklicht ?

            Wenn ja, dann:
            Screen Shot 2021-02-14 at 19.10.25 .png

            ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
            "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

            Dilldappe-ioD 1 Antwort Letzte Antwort
            0
            • AsgothianA Asgothian

              @dilldappe-io sagte in Memory Heap Error bei einfacher Schleife:

              naja, solange wie das Fenster eben auf ist bzw. der Kontakt eben "true" ist. Wenn das Fenster geschlossen wird, dann endet natürlich die Schleife, wenn nicht vorher js abstürzen würde

              Nein, tut sie nicht.

              Was da im Hintergrund passiert ist:

              • der Trigger wird aktiviert - dabei wird eine (temporäre) variable erstellt die die entsprechenden Daten beinhaltet (alten wert, neuen wert, etc)
              • dann läuft die "while" schleife synchron los
              • da du immer auf "variable=true" vergleichst, und innerhalb der Schleife den Wert der Variable nicht veränderst ist das eine Endlosschleife.
              • wenn der Trigger nocheinmal aktiv wird wird eine neue (temporäre) variable erzeugt, nicht die bestehende Variable angepasst.

              Was soll das machen ? Ein Blinklicht ?

              Wenn ja, dann:
              Screen Shot 2021-02-14 at 19.10.25 .png

              Dilldappe-ioD Offline
              Dilldappe-ioD Offline
              Dilldappe-io
              schrieb am zuletzt editiert von
              #6

              @asgothian thx

              D 1 Antwort Letzte Antwort
              0
              • Dilldappe-ioD Dilldappe-io

                @asgothian thx

                D Offline
                D Offline
                dkr
                schrieb am zuletzt editiert von
                #7

                @dilldappe-io Bei mir hat das Script mit der Verzögerung nicht funktioniert. Aber ich habe an meinem Shelly RGBW2 dann die App-Einstellung gefunden, ihn immer blinken zu lassen.
                Nun schallte ich ihn vom ioBroker nur mit der Farbe und ein/aus.

                1 Antwort Letzte Antwort
                0
                Antworten
                • In einem neuen Thema antworten
                Anmelden zum Antworten
                • Älteste zuerst
                • Neuste zuerst
                • Meiste Stimmen


                Support us

                ioBroker
                Community Adapters
                Donate

                516

                Online

                32.6k

                Benutzer

                82.1k

                Themen

                1.3m

                Beiträge
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                ioBroker Community 2014-2025
                logo
                • Anmelden

                • Du hast noch kein Konto? Registrieren

                • Anmelden oder registrieren, um zu suchen
                • Erster Beitrag
                  Letzter Beitrag
                0
                • Home
                • Aktuell
                • Tags
                • Ungelesen 0
                • Kategorien
                • Unreplied
                • Beliebt
                • GitHub
                • Docu
                • Hilfe