Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Ich würde so gerne, doch es klappt nicht

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Ich würde so gerne, doch es klappt nicht

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

      habs ergänzt

      1 Reply Last reply Reply Quote 0
      • N
        nobody last edited by

        Hallo zusammen,

        wäre mal an der Zeit, ein kleines Tutorial zum Thema Speicheroptimierung zu schreiben. Diese Daten verstecken sich zurzeit in vielen einzelnen Threads und sind somit nur schwer zu finden. Vielleicht kann das ja auch jemand in das Handbuch übernehmen. Ich hab da keinen Zugriff darauf.

        ioBroker und alle Adapter basieren auf node.js, einer Entwicklung für Serverseitiges Javascript auf Basis der V8 Engine von Google.

        Javascript ist eine interpretierende Sprache, bei der Variablen nicht explizit deklariert und freigegeben werden müssen. Die Bereinigung und Freigabe von Speicherbereichen erfolgt hier im Rahmen einer sogenannten Garbarge Collection. Diese arbeitet bei V8 nach dem Stop-The-World-Modell, d.h. für die Speicherbereinigung werden alle anderen Prozesse gestoppt und erst nach Abschluss der Speicherbereinigung wieder freigegeben.

        Die aktuellen Versionen von V8 bereinigen per Default den nicht mehr benötigten Hauptspeicher erst, wenn 512 MB belegt wurden. Da bei ioBroker der js-controller, alle als Daemon laufende Adapter und node-red eigenständige node.js Prozesse sind, kann somit theoretisch jeder dieser Prozesse auf mehr als 512 MB anwachsen. Dies ist insbesondere aus Systemen mit geringem RAM (z.B. Raspberry Pi) oder vielen Adaptern problematisch, da dies zur Beendigung von Prozessen das das System oder Programmabstützen führen kann.

        V8 erlaubt jedoch individuelle Festlegungen des Zeitpunkts, an dem die Garbage-Collection gestartet werden soll. Dies erfolgt über den Startparameter –max-old-space-size. Die aktuellen Versionen des js-controllers und der Admin-Oberfläche erlauben die individuelle Festlegung dieses Parameters pro Adapter.

        Für den js-controller muss dieser Parameter über die Konfigurationsdatei festgelegt werden:

        Datei /opt/iobroker-data/iobroker.json z.B. mit nano öffnen.

        Folgenden Text direkt nach der ersten geschweiften Klammer vor "network": { einfügen:

            "system": {
                "memoryLimitMB": 80
            },
        
        

        Hierdurch wird das Limit auf 80 MB gesetzt. Dieser Wert scheint zurzeit für den Controller ausreichend zu sein.

        Für alle anderen Adapter kann der Wert über die Admin-Oberfläche eingestellt werden:
        632_a.png

        Das Speicherlimit kann hier in der Spalte RAM-Limit eingetragen werden. Die Angabe erfolgt hierbei in MB. Keine Angabe = Default 512 MB.

        Welche Werte hier sinnvoll sind, hängt vom System und dem Nutzungsszenario ab. Das Bild zeigt Beispielwerte, mit dem ein Produktivsystem auf einen Raspberry PI 2b stabil läuft.

        Zum Thema history und sql gibt es ja schon einen guten Thread, der die Vor- und Nachteile beschreibt. Insbesondere bei mysql kann man durch die Anpassung der Konfiguration auch noch einiges zum Standard einsparen.

        Der Wert für den node-red-Adapter betrifft nur den ioBroker-Adapter, nicht jedoch den node-red-Prozess selbst. Dieser wird vom Adapter mit –max-old-space-size=128 gestartet.

        1 Reply Last reply Reply Quote 0
        • L
          looxer01 last edited by

          gab bzw gibt es denn Unterschiede bei der Garbage Collection, je nach verwendeter Linux Version ?

          Das könnte ja das unterschiedliche Verhalten (Stabilitaet) erklären. Andersherum, wenn das nicht der Fall ist, dann erklärt es das nicht.

          vG Looxer

          1 Reply Last reply Reply Quote 0
          • N
            nobody last edited by

            Die Garbage Collection hängt in erster Linie an V8 und somit an der node.js-Version.

            Bei den node.js-Versionen gibt es zumindest subjektiv erhebliche Unterschiede. Während die 0.10.x wohl auch mit dem geringen Speicher noch einiger Maßen zurecht gekommen ist, haben die von mir ausprobierten Version von 0.12.x fast alle mehr oder weniger häufig zu Abstützen geführt. Problem ist nur, dass mittlerweile viele node.js-Module mindestens eine 0.12.x voraussetzen. Auch wird der Stream 0.10.x nicht mehr weiterentwickelt und enhält keine Fixes mehr.

            Die node.js-Version 4.2.x basiert nicht direkt auf 0.12.x sondern auf den wieder integrierten Parallelprojekt io.js und läuft subjektiv stabiler als 0.12.x, hat aber auch das Problem, dass der Speicher irgendwann aufgebraucht ist. Ich mutmaße mal, dass dies generell an den neueren V8-Versionen liegt, die einfach per Default für mehr Hauptspeicher und nur wenige parallel laufende Prozesse optimiert sind. Deswegen sind die obigen Speicherlimitierungen wichtig.

            Generell würde ich heute für den Raspi 2b zum Jessie-Image mit node.js 4.2.6 raten. Das ist die aktuelle Long Term stable Version, die noch mit Fixes versorgt wird. Diese läuft sowohl mit ioBroker als auch mit dem aktuellen node-red 13.1 sehr gut zusammen.

            In node.js 5.x hat jedoch zu viele Änderungen drin und ist absolut nicht zu empfehlen.

            Alle aktuellen node.js-Versionen werden übrigens für Debian Jessie und somit auch für das aktuelle Raspbian-Image über den Package-Manager angeboten. Das hat den Vorteil, dass man sich über Updates und Kompatibilitäten weniger Gedanken machen braucht. Im Standard ist die 0.12.x LTS enthalten, für 4.2.x LTS muss folgendes einmal ausgeführt werden:

            curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
            sudo apt-get install -y nodejs
            
            

            Die LTS-Versionen werden nur noch mit Fixes versorgt, bekommen aber keine neuen Feature mehr. Somit ist das Risiko, dass ein Update zu Inkompatibilitäten führt, eher gering.

            https://nodejs.org/en/download/package- … tributions

            Generell lassen sich viele Fehler vermeiden, wenn man die npm-Pakete bei der Installation selber baut oder wenigstens als Fallback bauen kann. Dafür muss dann auch noch folgende installiert werden:

            sudo apt-get install -y build-essential
            
            
            1 Reply Last reply Reply Quote 0
            • L
              looxer01 last edited by

              …danke nobody. Das ist mal ne super Erklärung (und Empfehlung)

              und erklärt auch warum ich keine Probleme habe.

              Einschränkungen habe ich bisher in keiner Weise bemerkt.

              Das heisst aber wohl, dass es durchaus zu Problemen bei zukünftigen updates von iobroker bei mir kommen kann.

              Ich denke, dass ich das mal abwarte. Stabil ist besser als labil 🙂

              vG Looxer

              1 Reply Last reply Reply Quote 0
              • Jey Cee
                Jey Cee Developer last edited by

                @Nobody,

                danke für dein Erklärungen die sind sehr aufschlußreich.

                Bei einem Punkt hab ich aber andere Erfahrungen gemacht und ich glaube das Problem haben auch andere und wissen es nicht.
                @nobody:

                Im Standard ist die 0.12.x LTS enthalten `
                Bei meinen Installationen ist mir aufgefallen das bereits eine Node.js Version installiert ist, wenn man Debian Jessie auf dem Pi installiert.

                Es handelt sich um eine 0.10.x Version, diese lässt sich weder mit apt-get deinstallieren noch updaten. Auch ersetzen klappt nicht immer richtig weil die Symlinks erhalten bleiben, ebenso wie die PATH Variable(n).

                Erst mit dem deb-Paket von nodesource hat es dann Funktioniert.

                Hier mal meine Specs:

                ! Hardware: CCU2, RPi2 mit SSD
                ! Software: Debian Jessie (offizielle Version, nicht minimal), nodejs v4.2.1, npm v2.14.7, CCU2 2.15.2 + CUxD 0.9
                ! ioBroker:
                ! js-controller 0.8.4
                ! system.adapter.admin : admin - 0.7.3
                ! system.adapter.hm-rpc : hm-rpc - 0.5.2
                ! system.adapter.hm-rega : hm-rega - 0.2.2
                ! system.adapter.harmony : harmony - 0.5.5
                ! system.adapter.web : web - 1.3.4
                ! system.adapter.icons-addictive-flavour-png: icons-addictive-flavour-png - 0.1.0
                ! system.adapter.icons-material-png : icons-material-png - 0.1.0
                ! system.adapter.icons-material-svg : icons-material-svg - 0.1.0
                ! system.adapter.icons-mfd-png : icons-mfd-png - 0.1.2
                ! system.adapter.icons-mfd-svg : icons-mfd-svg - 0.1.2
                ! system.adapter.icons-ultimate-png : icons-ultimate-png - 0.1.0
                ! system.adapter.javascript : javascript - 1.1.4
                ! system.adapter.sayit : sayit - 0.3.16
                ! system.adapter.scenes : scenes - 0.2.4
                ! system.adapter.sonos : sonos - 0.1.7
                ! system.adapter.vis : vis - 0.8.4
                ! system.adapter.vis-bars : vis-bars - 0.1.1
                ! system.adapter.vis-colorpicker : vis-colorpicker - 0.1.1
                ! system.adapter.vis-fancyswitch : vis-fancyswitch - 0.1.0
                ! system.adapter.vis-google-fonts : vis-google-fonts - 0.1.0
                ! system.adapter.vis-hqwidgets : vis-hqwidgets - 0.2.5
                ! system.adapter.vis-jqui-mfd : vis-jqui-mfd - 0.1.0
                ! system.adapter.vis-keyboard : vis-keyboard - 0.0.2
                ! system.adapter.vis-lcars : vis-lcars - 0.1.6
                ! system.adapter.vis-metro : vis-metro - 0.2.0
                ! system.adapter.vis-plumb : vis-plumb - 0.1.6
                ! system.adapter.vis-rgraph : vis-rgraph - 0.0.2
                ! system.adapter.vis-timeandweather : vis-timeandweather - 0.0.2
                ! Und da die Frage eh kommt wie man eine Liste aller Adapter in Textform bekommt ohne zu Tippen, hier die Lösung:
                ! im Terminal "iobroker list adapters" eingeben.
                ! free -m zeigt bei mir folgendes an:
                ! total used free shared buffers cached
                ! Mem: 925 808 117 18 78 182
                ! -/+ buffers/cache: 547 378
                ! Swap: 99 0 99

                1 Reply Last reply Reply Quote 0
                • A
                  aquapro last edited by

                  Danke nobody!

                  Ich hab auf meinen beiden BananaPi Jessie drauf, mit node v0.12.6 .

                  Nach Deiner Meinung sollte v4.2.6 die bessere Wahl sein?!

                  Anbei mal zwei screens der Bananen (top sortiert nach Speicher).

                  Wobei z.B. der Speicherfresser history.0 schon mit RAMLimit 80 versorgt ist.

                  Nur versteh ich die Anzeige dann nicht, sieht mehr als 80 aus.

                  admin.0 läuft auf master, history.0 auf client.

                  ! filename="top3.PNG" index="1">~~
                  filename="top3a.PNG" index="0">~~
                  ! system.adapter.admin : admin - 0.7.3
                  ! system.adapter.hm-rpc : hm-rpc - 0.5.2
                  ! system.adapter.hm-rega : hm-rega - 0.2.2
                  ! system.adapter.history : history - 0.2.1
                  ! system.adapter.web : web - 1.3.4
                  ! system.adapter.vis : vis - 0.8.4
                  ! system.adapter.vis-hqwidgets : vis-hqwidgets - 0.2.5
                  ! system.adapter.vis-jqui-mfd : vis-jqui-mfd - 0.1.0
                  ! system.adapter.rickshaw : rickshaw - 0.3.1
                  ! system.adapter.fritzbox : fritzbox - 0.2.1
                  ! system.adapter.ical : ical - 1.1.1

                  1 Reply Last reply Reply Quote 0
                  • A
                    aquapro last edited by

                    @Jey Cee

                    Ich hab gar nicht geschaut, was bei meinem Jessie drauf war. Gleich die Befehle von der iobroker Installseite genommen.

                    wget http://www.iobroker.net/wp-content/uploads/2015/09/nodejs0_12_6_armhf.deb
                    dpkg -i nodejs0_12_6_armhf.deb
                    rm nodejs0_12_6_armhf.deb
                    
                    

                    Und keinen Fehler bekommen und node -v zeigt v0.12.6 .

                    Hab ich jetzt ein verstecktes Problem und deshalb die Fehler?

                    Gruß

                    Tino

                    1 Reply Last reply Reply Quote 0
                    • Jey Cee
                      Jey Cee Developer last edited by

                      @aquapro: Ist definitiv mehr. Zum übernehmen der RAM Einstellungen muss mindestens der Adapter neu gestartet werden evtl. ist auch ein Kompletter Neustart sinnvoll.

                      Also wenn die richtige Node Version angezeigt wird sollte alles im grünen Bereich sein. Da er dann die gewollte Node installation anspricht.

                      Ich weiss leider nicht mehr in welchem ordner die vor installierte Node version war, aber ich versuch das mal heraus zu finden.

                      Weiss jemand was die spalte Time+ bei Top aussagt? Ist das die Uptime des angezeigten dienstes?

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

                        Das ist ja mal eine spitzenmäßige Zusammenfassung zum Speicherthema. So langsam verstehe sogar ich die RasPi-Geschichte 😉

                        Ich habe jetzt gerade mal meine Node-Version ermittelt. Es ist die 0.10.22 - sollte ich da mal updaten?

                        Obwohl meine Installation leidlich läuft, zumindest wenn ich nach Updates genügend Reboots gemacht habe… 😉

                        1 Reply Last reply Reply Quote 0
                        • L
                          looxer01 last edited by

                          @Thisoft:

                          ch habe jetzt gerade mal meine Node-Version ermittelt. Es ist die 0.10.22 - sollte ich da mal updaten? `
                          die habe ich auch und überhaupt keine Probleme. Nach den Erklärungen von nobody werde ich productiv zunächst nix updaten.

                          Endlich haben wir eine neue Empfehlung für die Installation. Die muss aber noch von den Nutzern mit instabilen Installationen hier bestätigt werden - meine ich.

                          vG Looxer

                          1 Reply Last reply Reply Quote 0
                          • Jey Cee
                            Jey Cee Developer last edited by

                            Ich hab mal auf meinem Pi1 Jessie installiert und nach der Node version geschaut, die ist 0.10.29. Damit sollte ioBroker ja laufen.

                            Wenn diese Version drauf ist findet man in /usr/bin den Link node der auf nodejs im selben ordner verweisst und unter /usr/lib die Ordner nodejs und node_modules.

                            1 Reply Last reply Reply Quote 0
                            • N
                              nobody last edited by

                              @aquapro:

                              Danke nobody!

                              Ich hab auf meinen beiden BananaPi Jessie drauf, mit node v0.12.6 .

                              Nach Deiner Meinung sollte v4.2.6 die bessere Wahl sein?!

                              Anbei mal zwei screens der Bananen (top sortiert nach Speicher).

                              Wobei z.B. der Speicherfresser history.0 schon mit RAMLimit 80 versorgt ist.

                              Nur versteh ich die Anzeige dann nicht, sieht mehr als 80 aus.

                              admin.0 läuft auf master, history.0 auf client.

                              ! filename="top3.PNG" index="1">~~
                              filename="top3a.PNG" index="0">~~
                              ! system.adapter.admin : admin - 0.7.3
                              ! system.adapter.hm-rpc : hm-rpc - 0.5.2
                              ! system.adapter.hm-rega : hm-rega - 0.2.2
                              ! system.adapter.history : history - 0.2.1
                              ! system.adapter.web : web - 1.3.4
                              ! system.adapter.vis : vis - 0.8.4
                              ! system.adapter.vis-hqwidgets : vis-hqwidgets - 0.2.5
                              ! system.adapter.vis-jqui-mfd : vis-jqui-mfd - 0.1.0
                              ! system.adapter.rickshaw : rickshaw - 0.3.1
                              ! system.adapter.fritzbox : fritzbox - 0.2.1
                              ! system.adapter.ical : ical - 1.1.1 `
                              Nein, wenn du mit dieser Version keine Probleme hast, gibt es keinen Grund zu wechseln. Ich bin von der 0.12.9 auf die 4.2.x gewechselt, weil ich ohne die Begrenzungen immer Abstürze hatte. Die gibt es aber mit der 4.2.6 auch.

                              Die LTS Versionen haben halt den Vorteil, dass diese noch gepflegt werden. Das ist vor allem dann wichtig, wenn das System auch über das Internet erreichbar ist. Bei mir ist der pi gleichzeitig Reverse proxy für alle Systeme und openvpn-Server.

                              Wenn ich vorhin den Eindruck erweckt habe, dass man mit den Einstellungen direkt auf die Größe des Prozesses schließen kann, hab ich mich falsch ausgedrückt. Der Parameter max-old-space-size der damit gesetzt wird legt die maximale Größe des Heap fest, bei dem die Garbage Collection gestartet wird. Dies betrifft aber nur den Heap, vereinfacht ausgedrückt der Platz für Variablen. Darin nicht enthalten sind node.js, der Anwendungscode und der Platz für alle inkludierten Libs. Auch kann nur das frei gegeben werden, was nicht mehr verlinkt ist.

                              Gerade Beim history - Adapter werden viele Daten im RAM gehalten.

                              Gesendet von meinem GT-N8000 mit Tapatalk

                              1 Reply Last reply Reply Quote 0
                              • N
                                nobody last edited by

                                @Jey Cee:

                                Ich hab mal auf meinem Pi1 Jessie installiert und nach der Node version geschaut, die ist 0.10.29. Damit sollte ioBroker ja laufen.

                                Wenn diese Version drauf ist findet man in /usr/bin den Link node der auf nodejs im selben ordner verweisst und unter /usr/lib die Ordner nodejs und node_modules. `
                                Ich hab mal bei Debian nachgesehen. Offiziell ist wirklich noch die 0.10.29. Ich hab wohl irgendwann mal das Repository von nodesource.com aufgenommen…

                                Gesendet von meinem GT-N8000 mit Tapatalk

                                1 Reply Last reply Reply Quote 0
                                • V
                                  versteckt last edited by

                                  Hallo, habe heute für einen Arbeitskollegen erst einen Raspbian (Raspi 2) aufgesetzt.

                                  Dort ist eine 4er Node Version von http://weworkweplay.com/play/raspberry-pi-nodejs/ drauf.

                                  LG Christian

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate
                                  FAQ Cloud / IOT
                                  HowTo: Node.js-Update
                                  HowTo: Backup/Restore
                                  Downloads
                                  BLOG

                                  960
                                  Online

                                  31.8k
                                  Users

                                  80.0k
                                  Topics

                                  1.3m
                                  Posts

                                  10
                                  28
                                  5243
                                  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