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. Skriptausführung ioBroker.javascript: CPU-Grundlast 40 %

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.6k

Skriptausführung ioBroker.javascript: CPU-Grundlast 40 %

Geplant Angeheftet Gesperrt Verschoben JavaScript
9 Beiträge 4 Kommentatoren 488 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.
  • C Offline
    C Offline
    ceram
    schrieb am zuletzt editiert von ceram
    #1

    Hallo zusammen,

    kürzlich habe ich meine iobroker-Installation von einem RPi 4 (nativ, älterer und durchwachsener Versionsstand) auf einen RPi 5 (docker, latest, zentrale Komponenten wie admin, javascript, vis1 auch alle gehoben) migriert, dazu habe ich backitup genutzt.

    Soweit funktioniert auch alles. Bloß hat mein RPi 5 einen Lüfter, den mein RPi 4 nicht hatte. Und dieser Lüfter wollte mit vertretbaren Temperaturschwellwerten nie so wirklich ausgehen. Das hat mich veranlasst, mir mal die Grundlast meines Systems anzuschauen.

    Dabei ist mir aufgefallen, dass mein javascript-Adapter permanent für eine exorbitant hohe Grundlast von 20-40 % CPU (ein Kern) sorgt. Ca. 4 mal so viel wie das Kernsystem (js-controller) und zehnmal mehr als jeder andere Adapter. Ich habe wirklich viele Scripts laufen, wir sprechen hier von rund 50 Skripten, insgesamt knapp 10.000 Zeilen Code und sicherlich auch so 500 parallelen subscriptions. Mit dem Code werden auch durchaus rechenintensive numerische Berechnungen durchgeführt (z. B. um den Tagesertrag der Solaranlage aus der Momentanleistungshistorie mit irregulären Zeitintervallen korrekt zu ermitteln), alle paar Minuten gibt es solche komplexe Berechnungen.

    Also dachte ich: Ok, ich habe es wohl übertrieben. Aber die Ergebnisse meiner Tests, um diese Hypothese zu belegen, kann ich mir nicht erklären:

    Wenn ich alle (!) laufenden Skripte stoppe, bleibt die CPU-Last auf dem gleichen Niveau. Keinerlei Änderung. Auch ein Neustart des javascript-Adapters mit gestoppten Skripten führt direkt wieder in diese Auslastung. Neuinstallieren (= entfernen und frisch installieren) kann ich nicht machen, weil historisch bedingt ca. 500 zwingend benötigte Datenpunkte unter javascript.0.* liegen.

    Ich weiß mir keinen Rat mehr. Ist das normal, hat der javascript-Adapter tatsächlich so eine hohe Idle-Last? Oder ist bei mir ggf. irgend etwas zerschossen?

    Viele Grüße

    ceram

    Ro75R OliverIOO paul53P 3 Antworten Letzte Antwort
    0
    • C ceram

      Hallo zusammen,

      kürzlich habe ich meine iobroker-Installation von einem RPi 4 (nativ, älterer und durchwachsener Versionsstand) auf einen RPi 5 (docker, latest, zentrale Komponenten wie admin, javascript, vis1 auch alle gehoben) migriert, dazu habe ich backitup genutzt.

      Soweit funktioniert auch alles. Bloß hat mein RPi 5 einen Lüfter, den mein RPi 4 nicht hatte. Und dieser Lüfter wollte mit vertretbaren Temperaturschwellwerten nie so wirklich ausgehen. Das hat mich veranlasst, mir mal die Grundlast meines Systems anzuschauen.

      Dabei ist mir aufgefallen, dass mein javascript-Adapter permanent für eine exorbitant hohe Grundlast von 20-40 % CPU (ein Kern) sorgt. Ca. 4 mal so viel wie das Kernsystem (js-controller) und zehnmal mehr als jeder andere Adapter. Ich habe wirklich viele Scripts laufen, wir sprechen hier von rund 50 Skripten, insgesamt knapp 10.000 Zeilen Code und sicherlich auch so 500 parallelen subscriptions. Mit dem Code werden auch durchaus rechenintensive numerische Berechnungen durchgeführt (z. B. um den Tagesertrag der Solaranlage aus der Momentanleistungshistorie mit irregulären Zeitintervallen korrekt zu ermitteln), alle paar Minuten gibt es solche komplexe Berechnungen.

      Also dachte ich: Ok, ich habe es wohl übertrieben. Aber die Ergebnisse meiner Tests, um diese Hypothese zu belegen, kann ich mir nicht erklären:

      Wenn ich alle (!) laufenden Skripte stoppe, bleibt die CPU-Last auf dem gleichen Niveau. Keinerlei Änderung. Auch ein Neustart des javascript-Adapters mit gestoppten Skripten führt direkt wieder in diese Auslastung. Neuinstallieren (= entfernen und frisch installieren) kann ich nicht machen, weil historisch bedingt ca. 500 zwingend benötigte Datenpunkte unter javascript.0.* liegen.

      Ich weiß mir keinen Rat mehr. Ist das normal, hat der javascript-Adapter tatsächlich so eine hohe Idle-Last? Oder ist bei mir ggf. irgend etwas zerschossen?

      Viele Grüße

      ceram

      Ro75R Offline
      Ro75R Offline
      Ro75
      schrieb am zuletzt editiert von
      #2

      @ceram wenn ich das jetzt richtig verstanden habe, hast du jetzt allerdings eine weitere Schicht dazwischen, die es zuvor nicht gab - Docker. Hast du da die Compose oder den Stack korrekt eingestellt und auf dein System ggfs. (CPU, RAM) angepasst?

      Ro75.

      SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

      OliverIOO 1 Antwort Letzte Antwort
      0
      • Ro75R Ro75

        @ceram wenn ich das jetzt richtig verstanden habe, hast du jetzt allerdings eine weitere Schicht dazwischen, die es zuvor nicht gab - Docker. Hast du da die Compose oder den Stack korrekt eingestellt und auf dein System ggfs. (CPU, RAM) angepasst?

        Ro75.

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von OliverIO
        #3

        @ro75 hm, bei docker stellt man eigentlich weder cpu noch ram ein.
        das wird alles dynamisch zugeteilt.
        alle prozesse in einem container laufen ja nativ auf dem prozessor, genau so wie wenn sie ohne container ausgeführt werden.

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        Ro75R 1 Antwort Letzte Antwort
        0
        • C ceram

          Hallo zusammen,

          kürzlich habe ich meine iobroker-Installation von einem RPi 4 (nativ, älterer und durchwachsener Versionsstand) auf einen RPi 5 (docker, latest, zentrale Komponenten wie admin, javascript, vis1 auch alle gehoben) migriert, dazu habe ich backitup genutzt.

          Soweit funktioniert auch alles. Bloß hat mein RPi 5 einen Lüfter, den mein RPi 4 nicht hatte. Und dieser Lüfter wollte mit vertretbaren Temperaturschwellwerten nie so wirklich ausgehen. Das hat mich veranlasst, mir mal die Grundlast meines Systems anzuschauen.

          Dabei ist mir aufgefallen, dass mein javascript-Adapter permanent für eine exorbitant hohe Grundlast von 20-40 % CPU (ein Kern) sorgt. Ca. 4 mal so viel wie das Kernsystem (js-controller) und zehnmal mehr als jeder andere Adapter. Ich habe wirklich viele Scripts laufen, wir sprechen hier von rund 50 Skripten, insgesamt knapp 10.000 Zeilen Code und sicherlich auch so 500 parallelen subscriptions. Mit dem Code werden auch durchaus rechenintensive numerische Berechnungen durchgeführt (z. B. um den Tagesertrag der Solaranlage aus der Momentanleistungshistorie mit irregulären Zeitintervallen korrekt zu ermitteln), alle paar Minuten gibt es solche komplexe Berechnungen.

          Also dachte ich: Ok, ich habe es wohl übertrieben. Aber die Ergebnisse meiner Tests, um diese Hypothese zu belegen, kann ich mir nicht erklären:

          Wenn ich alle (!) laufenden Skripte stoppe, bleibt die CPU-Last auf dem gleichen Niveau. Keinerlei Änderung. Auch ein Neustart des javascript-Adapters mit gestoppten Skripten führt direkt wieder in diese Auslastung. Neuinstallieren (= entfernen und frisch installieren) kann ich nicht machen, weil historisch bedingt ca. 500 zwingend benötigte Datenpunkte unter javascript.0.* liegen.

          Ich weiß mir keinen Rat mehr. Ist das normal, hat der javascript-Adapter tatsächlich so eine hohe Idle-Last? Oder ist bei mir ggf. irgend etwas zerschossen?

          Viele Grüße

          ceram

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von
          #4

          @ceram

          also habe ich das richtig verstanden?
          der javascript adapter zieht ohne skripte genausoviel cpu wie mit skripte?
          dann liegt es ja erst mal nicht an den skripten.
          da würde mir nur eines einfallen, das du wirklich viele änderungen an datenpunkten hast.
          standardmäßig abonniert der javascript adapter alle datenpunkte. d.h. bei jeder änderung irgendeines datenpunkts (unabhängig ob in einem skript behandelt oder nicht) hat der adapter etwas zu tun (schreibt die daten in einen puffer).

          evtl kannst du in der javascript konfiguration diese option mal aktivieren.
          mal schauen ob dann die prozessorlast runtergeht. dann erhält der javascript adapter nur eine meldung, wenn dieser datenpunkt explizit abonniert wurde (was ja durch den on-befehl passiert).

          eine weitere idee wäre noch:
          der adapter läuft nur in einem prozess und kann zum gleichen zeitpunkt immer genau nur eine einzige anweisung ausführen. ein prozess läuft immer genau auf einer cpu. also die last eines prozesses kann nicht auf mehrere cpus verteilt werden.
          wenn da jetzt zum gleichen zeitpunkt sehr viel passiert (50 skripte), warten die anweisungen dann entsprechend bis sie dran sind. das wird über den heap verwaltet.
          das kann dazu führen das eine cpu höher belastet ist während die anderen sich langweilen (ich glaube ein raspi hat 4 cpus)
          ggfs. kannst du die last bei aktivierten skripten etwas verbessern in dem du die skripte auf 2 javascript adapter aufteilst. zumindest die skripte die besonders ressourcenintensiv sind. dadurch kann sich die last etwas verteilen. aber wie gesagt nur wenn die last mit skripte ebenfalls höher ist wie ohne.

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          1 Antwort Letzte Antwort
          0
          • C ceram

            Hallo zusammen,

            kürzlich habe ich meine iobroker-Installation von einem RPi 4 (nativ, älterer und durchwachsener Versionsstand) auf einen RPi 5 (docker, latest, zentrale Komponenten wie admin, javascript, vis1 auch alle gehoben) migriert, dazu habe ich backitup genutzt.

            Soweit funktioniert auch alles. Bloß hat mein RPi 5 einen Lüfter, den mein RPi 4 nicht hatte. Und dieser Lüfter wollte mit vertretbaren Temperaturschwellwerten nie so wirklich ausgehen. Das hat mich veranlasst, mir mal die Grundlast meines Systems anzuschauen.

            Dabei ist mir aufgefallen, dass mein javascript-Adapter permanent für eine exorbitant hohe Grundlast von 20-40 % CPU (ein Kern) sorgt. Ca. 4 mal so viel wie das Kernsystem (js-controller) und zehnmal mehr als jeder andere Adapter. Ich habe wirklich viele Scripts laufen, wir sprechen hier von rund 50 Skripten, insgesamt knapp 10.000 Zeilen Code und sicherlich auch so 500 parallelen subscriptions. Mit dem Code werden auch durchaus rechenintensive numerische Berechnungen durchgeführt (z. B. um den Tagesertrag der Solaranlage aus der Momentanleistungshistorie mit irregulären Zeitintervallen korrekt zu ermitteln), alle paar Minuten gibt es solche komplexe Berechnungen.

            Also dachte ich: Ok, ich habe es wohl übertrieben. Aber die Ergebnisse meiner Tests, um diese Hypothese zu belegen, kann ich mir nicht erklären:

            Wenn ich alle (!) laufenden Skripte stoppe, bleibt die CPU-Last auf dem gleichen Niveau. Keinerlei Änderung. Auch ein Neustart des javascript-Adapters mit gestoppten Skripten führt direkt wieder in diese Auslastung. Neuinstallieren (= entfernen und frisch installieren) kann ich nicht machen, weil historisch bedingt ca. 500 zwingend benötigte Datenpunkte unter javascript.0.* liegen.

            Ich weiß mir keinen Rat mehr. Ist das normal, hat der javascript-Adapter tatsächlich so eine hohe Idle-Last? Oder ist bei mir ggf. irgend etwas zerschossen?

            Viele Grüße

            ceram

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

            @ceram sagte: Auch ein Neustart des javascript-Adapters mit gestoppten Skripten führt direkt wieder in diese Auslastung.

            Auch ein Neustart von ioBroker mit gestoppten Skripten?

            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

            1 Antwort Letzte Antwort
            0
            • OliverIOO OliverIO

              @ro75 hm, bei docker stellt man eigentlich weder cpu noch ram ein.
              das wird alles dynamisch zugeteilt.
              alle prozesse in einem container laufen ja nativ auf dem prozessor, genau so wie wenn sie ohne container ausgeführt werden.

              Ro75R Offline
              Ro75R Offline
              Ro75
              schrieb am zuletzt editiert von
              #6

              @oliverio sagte in Skriptausführung ioBroker.javascript: CPU-Grundlast 40 %:

              hm, bei docker stellt man eigentlich weder cpu noch ram ein.

              Also man kann schon Einfluss nehmen.

                  deploy:
                    resources:
                      limits:
                        cpus: '2.00'
                        memory: 1G
                      reservations:
                        cpus: '0.25'
                        memory: 100M
              

              So zum Beispiel. Aber eine Konfiguration haben wir noch nicht gesehen.

              Ro75.

              SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

              OliverIOO 1 Antwort Letzte Antwort
              0
              • C Offline
                C Offline
                ceram
                schrieb am zuletzt editiert von
                #7

                Hallo zusammen,

                erst einmal vielen Dank für eure super schnelle Hilfe und all die Tipps. Ich will euch jetzt nicht mit docker composes und anderen Dingen langweilen, an denen es nicht lag. Deshalb komme ich schnell zur Sache.

                Mir war nicht bewusst, dass der Adapter alle States subscribed, das sind bei mir schon eine Menge. Ausschalten der Option war aber leider auch keine Option, dann scheitert jedes getState() sofort mit Verweis darauf, dass es ohne die Option nicht synchron verwandt werden kann.

                Deshalb dachte ich mir, ich deaktiviere einfach mal diejenigen Adapter, die viele Zustände in kurzen Abständen aktualisieren - und einen dev-Adapter, der einen wirklich sehr experimentellen Eindruck machte. Und siehe da: Die Auslastung ging sofort merklich runter, in den Bereich von 1-2%.

                Auf der Suche nach dem konkreten Schuldigen dachte ich erst an unifi, weil der schon detaillierte Stats zu rund 200 Netzwerkgeräten bereithält und die laufend aktualisiert - er hat mit Abstand die meisten Datenpunkte. Aber nein, es war der unscheinbare Adapter "roborock" im dev-Branch, den ich nach dem Upgrade auf den RPi 5 (auf dem RPi 4 war RaspiOS zu alt für die benötigte node-Version) endlich mal ausprobieren wollte, der aber nur im dev-Branch überhaupt startete. Ich lasse ihn jetzt deaktiviert, schade um die frisch programmierte Erweiterung für meine Alarmanlage, mit der ich Bewegungen auf Etagen ignorieren konnte, auf denen gerade ein Roboter fuhr :laughing:

                Ich bin jetzt jedenfalls froh, dass mein System wieder rund läuft. Und der Lüfter ist auch ausgegangen :)

                Vielen Dank!

                ceram

                OliverIOO 1 Antwort Letzte Antwort
                1
                • Ro75R Ro75

                  @oliverio sagte in Skriptausführung ioBroker.javascript: CPU-Grundlast 40 %:

                  hm, bei docker stellt man eigentlich weder cpu noch ram ein.

                  Also man kann schon Einfluss nehmen.

                      deploy:
                        resources:
                          limits:
                            cpus: '2.00'
                            memory: 1G
                          reservations:
                            cpus: '0.25'
                            memory: 100M
                  

                  So zum Beispiel. Aber eine Konfiguration haben wir noch nicht gesehen.

                  Ro75.

                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  schrieb am zuletzt editiert von
                  #8

                  @ro75

                  Das sind Limitierungen und keine Zuordnungen.
                  Damit verhindert man das ein Container sich Zuviel holt.

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  1 Antwort Letzte Antwort
                  0
                  • C ceram

                    Hallo zusammen,

                    erst einmal vielen Dank für eure super schnelle Hilfe und all die Tipps. Ich will euch jetzt nicht mit docker composes und anderen Dingen langweilen, an denen es nicht lag. Deshalb komme ich schnell zur Sache.

                    Mir war nicht bewusst, dass der Adapter alle States subscribed, das sind bei mir schon eine Menge. Ausschalten der Option war aber leider auch keine Option, dann scheitert jedes getState() sofort mit Verweis darauf, dass es ohne die Option nicht synchron verwandt werden kann.

                    Deshalb dachte ich mir, ich deaktiviere einfach mal diejenigen Adapter, die viele Zustände in kurzen Abständen aktualisieren - und einen dev-Adapter, der einen wirklich sehr experimentellen Eindruck machte. Und siehe da: Die Auslastung ging sofort merklich runter, in den Bereich von 1-2%.

                    Auf der Suche nach dem konkreten Schuldigen dachte ich erst an unifi, weil der schon detaillierte Stats zu rund 200 Netzwerkgeräten bereithält und die laufend aktualisiert - er hat mit Abstand die meisten Datenpunkte. Aber nein, es war der unscheinbare Adapter "roborock" im dev-Branch, den ich nach dem Upgrade auf den RPi 5 (auf dem RPi 4 war RaspiOS zu alt für die benötigte node-Version) endlich mal ausprobieren wollte, der aber nur im dev-Branch überhaupt startete. Ich lasse ihn jetzt deaktiviert, schade um die frisch programmierte Erweiterung für meine Alarmanlage, mit der ich Bewegungen auf Etagen ignorieren konnte, auf denen gerade ein Roboter fuhr :laughing:

                    Ich bin jetzt jedenfalls froh, dass mein System wieder rund läuft. Und der Lüfter ist auch ausgegangen :)

                    Vielen Dank!

                    ceram

                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    schrieb am zuletzt editiert von
                    #9

                    @ceram

                    Die Sync getState kannst du einfach umstellen durch

                    await getStateAsync

                    Das hat den selben Effekt.

                    Ein echtes Sync gibtves bei JavaScript eh nie.

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    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

                    867

                    Online

                    32.4k

                    Benutzer

                    81.4k

                    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