Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. [Experimentell] JS-Controller compact mode

    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

    [Experimentell] JS-Controller compact mode

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

      So, ich habe nun nach einigen anläufen eine vm aufgesetzt wo der neue js-controller drauf ist und den cm eingeschaltet in der config. ist es richtig, dass der einzige hinweis auf den mode der logeintrag ist, dass der adapter im compact mode läuft? weil unter instanzen steht zum beispiel beim javascript adapter mit und ohne comact mode 100 MB Ram..

      1 Reply Last reply Reply Quote 0
      • Meistertr
        Meistertr Developer last edited by

        so habe proxmox adapter nun mal versucht umzustellen. sah auch auf dem ersten Blick ganz gut aus. aber wenn ich den adapter stoppe, schmiert der js-controller ab. log:

        host.cmbroker	2019-02-16 20:22:05.953	info	iobroker.js-controller version 2.0.0 js-controller starting
        admin.0	2019-02-16 20:22:05.415	error	at _combinedTickCallback (internal/process/next_tick.js:139:11)
        admin.0	2019-02-16 20:22:05.415	error	at emitErrorNT (internal/streams/destroy.js:66:8)
        admin.0	2019-02-16 20:22:05.415	error	at Socket.emit (events.js:211:7)
        admin.0	2019-02-16 20:22:05.415	error	at emitOne (events.js:116:13)
        admin.0	2019-02-16 20:22:05.415	error	at WebSocket.finalize (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/ws/lib/WebSocket.js:182:41)
        admin.0	2019-02-16 20:22:05.415	error	at WebSocket.emit (events.js:211:7)
        admin.0	2019-02-16 20:22:05.415	error	at emitOne (events.js:116:13)
        admin.0	2019-02-16 20:22:05.415	error	at WebSocket.onError (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/ws/lib/EventTarget.js:109:16)
        admin.0	2019-02-16 20:22:05.415	error	at WebSocket.ws.onerror (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/engine.io-client/lib/transports/websocket.js:150:10)
        admin.0	2019-02-16 20:22:05.415	error	at WS.Transport.onError (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/engine.io-client/lib/transport.js:64:13)
        admin.0	2019-02-16 20:22:05.415	error	Error: websocket error
        admin.0	2019-02-16 20:22:05.414	error	websocket error
        proxmox.0	2019-02-16 20:22:05.406	error	uncaught exception: Cannot read property 'pushLog' of null
        javascript.0	2019-02-16 20:22:05.405	error	uncaught exception: Cannot read property 'pushLog' of null
        host.cmbroker	2019-02-16 20:22:05.392	info	instance system.adapter.proxmox.0 terminated with code undefined ()
        2019-02-16 20:22:05.391	info	erminating
        host.cmbroker	2019-02-16 20:22:05.390	info	stopInstance system.adapter.proxmox.0 killing pid undefined
        host.cmbroker	2019-02-16 20:22:05.390	info	stopInstance system.adapter.proxmox.0
        proxmox.0	2019-02-16 20:22:05.390	info	cleaned everything up...
        host.cmbroker	2019-02-16 20:22:05.389	info	object change system.adapter.proxmox.0
        

        hier der code:

        Proxmox Compactmode

        liegts an mir oder am js-controller?

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

          Mit dem Compact Mode ist es extrem wichtig das Du in der unload-Funktion wirklich alles stoppst und Verbindungen beendest und so. Kann es sein das da noch was offen bleibt bei Dir?
          Das mit dem "pushLog" bitte mal im GitHub melden

          frankjoke 1 Reply Last reply Reply Quote 0
          • M
            Marty56 last edited by Marty56

            Ich habe die jscontroller Version 2 installiert, das iobroker.json file editiert.
            Es scheint aber, dass die Adapter nicht im compact modus starten.

            Muss ich sonst noch etwas beachten?
            Bei mir läuft iobroker zum Test in einem Synology Docker.

            ee6ecfe0-276c-4c7c-afa7-152c1b533bb9-image.png

            b3eb729f-9833-402e-9f4f-45d0a3cdb6f1-image.png

            6fe6634d-1c23-4901-b871-3fa4c8726629-image.png

            46247bed-a386-4d3d-8223-9590ddccf88a-image.png

            Update: Es scheint doch funktioniert zu haben. Beim Homematic Adapter wird beim Starten im Log sogar angezeigt, dass er im Compact Modus gestartet wurde. Ich war nur irritiert von der Memory Anzeige.

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

              Die Memory ANzeige ist noch ein Bug, gibt ein Issue dazu das noch zu fixen.

              Aber nur so zur Sicherheit: 2.0.0 ist noch tief in der Entwicklung!!

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

                @apollon77 sagte in [Experimentell] JS-Controller compact mode:

                Mit dem Compact Mode ist es extrem wichtig das Du in der unload-Funktion wirklich alles stoppst und Verbindungen beendest und so. Kann es sein das da noch was offen bleibt bei Dir?
                Das mit dem "pushLog" bitte mal im GitHub melden

                Das hab ich auch schon rausgefunden! Leider sind einige Module wie noble so schlecht programmiert dass sie das nicht selbst machen und auch kein e'close'-Funktion oder sowas zur Verfügung stellen.

                Muss bei einigen Adaptern einiges ändern damit das gewährleistet ist, bei manchen wird man es nicht schaffen.

                Übrigens, hoffe das in Admin (wenn der Adapter das kann) ein Häkchen bei den Instanzen kommt wo man das pro Adapter aktivieren kann oder nicht. Für Leute die kein Speicherproblem haben ist's eine Veringerung der Sicherheit weil der/die Adapter dann auch den js-controller mitabschießen können!

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

                  @frankjoke sagte in [Experimentell] JS-Controller compact mode:

                  Übrigens, hoffe das in Admin (wenn der Adapter das kann) ein Häkchen bei den Instanzen kommt wo man das pro Adapter aktivieren kann oder nicht. Für Leute die kein Speicherproblem haben ist's eine Veringerung der Sicherheit weil der/die Adapter dann auch den js-controller mitabschießen können!

                  see https://github.com/ioBroker/ioBroker.admin/issues/351

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

                    Habe den ersten Adapter versucht auf compact mode zu bringen: meine Erfahrungen soweit!

                    p.s.: Was soll im Forum immer diese kranke Meldung ob man nicht einen neuen thread aufmachen will oder auf dem alten antworten? Natürlich will ich keine neuen threads auf machen wenn ich in einem was antworte, auch wenn es nach einem Jahr ist!!!

                    Habe eine Testinstanz auf einem Ubuntu Server LTS 18.0.2 auf meinem QNAP gemacht, nur 2 CPU's und 1.2GB memory, nodejs V8.x, iobroker, redis.

                    Die dev-Version vom js-controller drauf und compact in den jsons gesetzt, vorher natürlich den code von hier ersetzt/dazu.

                    Erster Start: Hab schon gesehen dass admin gemeinsam mit js-controller in der gleichen Instanz läuft, hatte vorher auch nur admit 'enabled'.
                    Nun meinen enabled: Einige Error messages im log vom host und dann wird der Adapter als normale Instanz gestartet (niocht compact)!
                    Der Fehler nicht sehr aussagekräftig, wie immer mit property von null...
                    Ok, bin draufgekommen dass ich natürlich keine Funktionen im startAdapter verwenden kann die einen Adapter brauchen, wie z.B. die logs! Ok, das korrigiert und normale console.log genommen um den Dingen auf die Schliche zu kommen. Adapter startet und arbeitet im compact mode!
                    Adapter versucht zu stoppen, wieder Absturz. da da keine Meldung kam hab ich iobroker gestoppt und mit
                    sudo -u iobroker node --inspect=ipadresse:9229 /opt/iobroker/node_modules/iobroker.js-controller/main.js --force --logs --nolazy
                    gestartet und den chrome-debugger auf die inspect-Adresse angesetzt. Vorher hatte ich bei einigen neuralgischen Punkten debugger; eingefügt um zu sehen was mit startAdapter und beim adapter-stop passiert.

                    Also mal dem adapterStart zugeschaut, ich wollte ja wissen wie ich sehen kann ob mein Adapter im compact mode aufgerufen worden ist!

                    Die options die bei compact mode dem startAdapter übergeben werden sind: options = {logLevel: "info", compactInstance: "0", compact: true}

                    Beim Stoppen des Adapters bin ich draufgekopmmen dass ein Fehler in einem callback den Adapter (und natürlich damit js-controller) zum Absturz gebracht hat, dieser Fehler wäre bei normalen Startmode nicht aufgefallen da der Adapter ja eh geschlossen wird.

                    Nun, Adapter restart!

                    Eigenartige logs (test mit radar2, meine Meldungen von der exit-routine nach on-'unload'):

                    host.qnbuntu	2019-04-08 20:13:52.371	info	instance system.adapter.radar2.0 started in COMPACT mode
                    radar2.0	2019-04-08 18:13:50.759	warn	Adapter will exit now with code false and method adapter.terminate!
                    2019-04-08 18:13:50.354	info	erminating
                    Terminated	2019-04-08 18:13:49.864	warn	(NO_ERROR): Without reason
                    host.qnbuntu	2019-04-08 18:13:49.869	info	instance system.adapter.radar2.0 terminated with code 0 (NO_ERROR)
                    2019-04-08 18:13:49.862	info	erminating
                    radar2.0	2019-04-08 18:13:49.858	warn	Adapter will exit in latest 1 sec with code false!
                    host.qnbuntu	2019-04-08 18:13:49.850	info	stopInstance system.adapter.radar2.0 killing pid undefined
                    host.qnbuntu	2019-04-08 18:13:49.849	info	stopInstance system.adapter.radar2.0
                    

                    Jetzt ne Menge Fehlermeldungen aus meinem Adapter!

                    Warum: Es reicht nicht nur die oben beschriebenen Routinen umzuschreiben, ihr müsst jetzt auch den Adapter fit machen da er ja anders aufgerufen wird.

                    Beim Laden und 1. Start wird er normal durchlaufen und eure Befehle werden ausgeführt und constanten und Variablen definiert. Nach einem Restart startet er von adapter start, und alle Variablen bleiben auf den alten Werten vor dem restart!

                    Ich habe z.B. einige constants und viele let-Variable definiert die globale Daten im Adapter darstellen sollen. Die müssen jetzt woanders hin oder mit im startAdapter neu zurückgestellt werden (damit scheiden constants jetzt teilweise aus).

                    Außerdem musste ich sicherstellen dass alle Resources beim adapterstop abgeschaltet werden, alle timer und auch alle listener die eventuell an ports oder System-Events hängen die noch Daten liefern können, hatte da was vergessen und das lief dann weiter und erzeugte Fehler im log.

                    Mein radar2-Adapter wird deswegen nicht compact-fähig sein da ein module (noble für BT-LE) sich nicht abschalten lässt und etliche links ins Betriebssystem macht welche flott weiterarbeiten, auch wenn man die Instanz löscht (was eigentlich nicht geht da es ein Verwis auf ein singleton im modul ist).

                    Mit diesen Erfahrungen gewappnet mach ich mich auf den Weg und werde versuchen broadlink2, xs1, km200, systeminfo und auch die sich noch im Alfa-Stadium befindende statemachine umzubauen...

                    Nochwas: Man muss einen upload durchführen damit der Adapter (mittel io-package.json) wieder im non-compact mode läft.

                    Und: Speicher, wenn js-controller, admin und mein adapter im compact mode laufen dann brauch ich ca 150MB (est ist nur ein Prozess).
                    Wenn mein Adapter nicht also copmpact läft braucht er ca 60MB und js-controller+admin 80MB.

                    Ich würde einen Tipp ans ioBroker-Team geben: Bitte compact-mode-adapter NICHT im selben task wie js-controller laufen lassen sondern in einem dummy-adapter in einem eigenen Prozess! Das ganze wird sehr anfällig auf Fehler da jeder Fehler der nicht abgefangen wird durchschlägt!

                    Ach übrigens: es kommen auch folgende Fehler vor, die aber unabhängig von meinem Adapter:

                    Bei Start von iobroker immer:
                    2019-04-08 19:39:56.333 - error: admin.0 invalid instance object: {"_id":"","type":"meta","common":{"name":"user files and images for background image","type":"meta.user"},"native":{}}

                    Wenn mein Adapter im non-compact-mode gestartet wird (obwohl das assert nur im js-controller sein kann da ich in radar2 keins drin hab:
                    2019-04-08 19:35:58.436 - error: host.qnbuntu error with /opt/iobroker/node_modules/iobroker.radar2/radar2.js: {"generatedMessage":false,"name":"AssertionError [ERR_ASSERTION]","code":"ERR_ASSERTION","actual":false,"expected":true,"operator":"=="}

                    Liebe Grüße und danke für den Support von einigen
                    Frank

                    1 Reply Last reply Reply Quote 0
                    • AlCalzone
                      AlCalzone Developer last edited by AlCalzone

                      Um kurz meinen Senf dazu zu geben:

                      @frankjoke sagte in [Experimentell] JS-Controller compact mode:

                      Bitte compact-mode-adapter NICHT im selben task wie js-controller laufen lassen sondern in einem dummy-adapter in einem eigenen Prozess!

                      Haben wir schon auf dem Schirm
                      https://github.com/ioBroker/ioBroker.js-controller/issues/303

                      @frankjoke sagte in [Experimentell] JS-Controller compact mode:

                      Ich habe z.B. einige constants und viele let-Variable definiert die globale Daten im Adapter darstellen sollen. Die müssen jetzt woanders hin oder mit im startAdapter neu zurückgestellt werden (damit scheiden constants jetzt teilweise aus).

                      Ist mir auch schon aufgefallen. Ich habe die in eine eigene Datei ausgelagert, die dann im require-cache hängt und somit das selbe Problem hat. Hier ist bei manchen Adaptern sicherlich Umdenken angesagt.

                      @frankjoke sagte in [Experimentell] JS-Controller compact mode:

                      Außerdem musste ich sicherstellen dass alle Resources beim adapterstop abgeschaltet werden, alle timer und auch alle listener die eventuell an ports oder System-Events hängen die noch Daten liefern können, hatte da was vergessen und das lief dann weiter und erzeugte Fehler im log.

                      Da muss ich mal etwas ketzerisch sein. Das solltest du sowieso tun und dich nicht drauf verlassen, dass NodeJS hinter dir aufräumt.

                      @frankjoke sagte in [Experimentell] JS-Controller compact mode:

                      Beim Stoppen des Adapters bin ich draufgekopmmen dass ein Fehler in einem callback den Adapter (und natürlich damit js-controller) zum Absturz gebracht hat, dieser Fehler wäre bei normalen Startmode nicht aufgefallen da der Adapter ja eh geschlossen wird.

                      Auch richtig. Daher wird compact nicht standardmäßig aktiviert werden. Und falls es das sollte, müssen Adapter hierfür zertifiziert werden.

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

                        Hey All,

                        js-controller 2.0 hat einen weiteren großen Schritt gemacht und sollte nun nahezu feature complete sein. Der Alpha Test kann ...

                        Vor allem der compact mode hat einiges an neuen Features bekommen und erlaubt jetzt auch Adapter in Gruppen zu starten die jeweils einen eigenen Host-Prozess haben.

                        **Achtung: Eine wichtige Änderung gibt es: Auch wenn für den Host der compact mode aktiviert ist werden Adapterinstanzen NICHT mehr automatisch auch im compact modus gestartet. Dazu gibt es die neuen "iobroker compact XYZ" CLI kommandos ... **

                        Bitte prüft alle Eure Compact Adapter mit dem neuesten js-controller vom GitHub!!

                        Changelog (hoffe habe alles erwischt)
                        https://github.com/ioBroker/ioBroker.js-controller/blob/master/CHANGELOG.md#200-2019-09-xx-release-bella

                        Daher gern der Aufruf ... aktualisiert bitte Eure (Test-)Systeme und gebt Feedback.

                        1 Reply Last reply Reply Quote 0
                        • X
                          Xyolyp last edited by

                          Gibt es eine Möglichkeit eine compactgroup in der keine Instanzen mehr sind zu entfernen? Der JS Controller startet die permanent neu nachdem er festgestellt hat, dass er keine Instanz darin starten muss.

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

                            @Xyolyp hast du mal ein log davon? Eine compact Group sollte an sich nur gestartet werden wenn auch was drin ist. Und: Controller 2.2.8 oder ne andere Version?

                            X 1 Reply Last reply Reply Quote 0
                            • X
                              Xyolyp @apollon77 last edited by

                              @apollon77 Ich wollte gerade das Log kopieren aber der Host scheint sich beruhigt zu haben.

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              723
                              Online

                              31.9k
                              Users

                              80.1k
                              Topics

                              1.3m
                              Posts

                              14
                              47
                              8848
                              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