NEWS
EXPERIMENTELL: JsonL Datenbank für js-controller
-
@apollon77 sagte in EXPERIMENTELL: JsonL Datenbank für js-controller:
jsonl
Die Umstellung von redis/redis auf jsonl/redis ist bei mir ohne Probleme durchgelaufen. Der iobroker ist anschließend auch ohne Fehler gestartet.
Bei mir wurden vorher (nachdem ich die Speicherzyklen für die redis-Datenbank auf alle 12h reduziert hatte) rund 10GB/d geschrieben. Ich werde berichten, wie sich das System mit der neuen Datenbank verhält.
Gruß Marco
-
geb hier auch mal meinen Stand, nach rund 8Std kund.Ingesamt viel "ruhiger", hochgerechnet, komm ich auf rund 7,5GB diskwrite pro Tag.
Ob sich das in Zukunft bewährt, oder irgendwelche Probleme dadurch entstehen, wird sich noch zeigen.
zum Vergleich, die alten Werte, siehe
https://forum.iobroker.net/post/565703
https://forum.iobroker.net/post/564780
https://forum.iobroker.net/post/564691Was mir jedoch nun noch negativ aufgefallen ist, der Anstieg der CPU
vllt auch noch Nennenswert, welche/wie viele Instanzen aktiv laufen
-
@crunchip den CPU Verbrauch hast du nur absolut gell?! Also weiß nicht welcher Prozess das ggf ist.
-
@crunchip sagte in EXPERIMENTELL: JsonL Datenbank für js-controller:
der Anstieg der CPU
Das würde ich mir gerne mal genau anschauen. Kannst du einen Adapter, der viele Events hat, mal wie folgt manuell starten?
cd /opt/iobroker/node_modules/iobroker.<adaptername> node --prof main.js
Etwas laufen lassen, dann beenden. Du solltest eine Datei finden, die mit
v8.log
endet.
Diese bitte umwandeln mitnode --prof-process --preprocess *v8.log > processed.txt
und mir die Datei
processed.txt
schicken. -
@apollon77 nein leider nicht, ist mir halt nur laut Proxmox Anzeige aufgefallen und bisher auch noch nicht weiter verfolgt
-
@alcalzone Macht das Sinn beim Adapter?? Wenn es an der dB liiert kann’s doch nur der Master Controller sein
-
@alcalzone sagte in EXPERIMENTELL: JsonL Datenbank für js-controller:
node --prof-process --preprocess *v8.log > processed.txt
hab ich erledigt, habe mal den sonoff Adapter dafür hergenommen, Text Datei hat 4mb, wohin soll ich sie schicken?
-
@apollon77 könntest Recht haben... Kann @crunchip den auch einfach mit dem Flag starten?
@crunchip müsstest du einfach hier hochladen können oder geht das nicht?
-
-
@crunchip Da sieht man tatsächlich nichts von der DB. Bin mir gerade nicht sicher, wie man den Controller selbst mit dem Flag starten kann.
-
@alcalzone am Ende startest du die Main.js oder Controller.js. (Geht beides). Grad unterwegs. Daher ganzen Pfad tippen blöd.
-
@apollon77 sagte in EXPERIMENTELL: JsonL Datenbank für js-controller:
Ich würd das gern mal grob Gegenrechnen. Sag mal wie groß die „alten“ objects.json bzw States.json sind ... also nicht die jsonl files.
Die hatten etwa 15 MB (objects) bzw. 2,5 MB (states).
Und .... waren die 190gb mit dem 1h objects speichern oder davor?
Also begonnen hat die Aktion bei mir mit ca. 250 GB / Tag. Das konnte ich etwas reduzieren indem ich den Zyklus von netatmo und daswetter reduziert habe. Nach der Umstellung auf redis für die states und die objects nur einmal pro Stunde schreiben, hatte ich dann rund 23 GB pro Tag. Der neue Controller hat das auf 12 GB pro Tag reduziert. Und jetzt mit jsonl / jsonl komme ich auf 118 MB am Tag.
Wobei mir in den Proxmox-Grafiken noch nicht aufgefallen ist, dass die Dateien gepackt und neu geschrieben wurden. Wie oft passiert das? Denn die 118 MB kommen mir schon wenig vor.
Die CPU-Last ist bei mir auch wieder in die Höhe gegangen (~50% mehr). Durch redis konnte ich gegenüber file aber zuvor die Belastung senken. Jetzt ist sie vielleicht etwas höher als unter file / file. Laut htop verursacht der js-controller die mit Abstand höchste CPU-Last.
-
also würde dann so aussehen, oder?
cd /opt/iobroker/node_modules/iobroker.js-controller node --prof main.js *bzw* node --prof controller.js
und dann iobroker stoppen, starten?
-
@dr-bakterius sagte in EXPERIMENTELL: JsonL Datenbank für js-controller:
Wobei mir in den Proxmox-Grafiken noch nicht aufgefallen ist, dass die Dateien gepackt und neu geschrieben wurden. Wie oft passiert das? Denn die 118 MB kommen mir schon wenig vor.
By default nach folgenden Regeln:
- Beim Start von ioBroker und
- Wenn die Datei auf die doppelte tatsächlich benötigte Größe angewachsen ist, aber erst wenn sie mindestens 1000 Zeilen enthält.
Je nachdem, wie oft es bei dir Veränderungen gibt, kann das sehr selten passieren. Da sich hauptsächlich die States verändern sollten, werden dann jedesmal so um die 2,5 MB geschrieben. Alle anderen Schreibzugriffe sind eher im Byte- bis max. Kilobyte-Bereich.
@crunchip Ich glaube vorher iobroker stoppen, dann den genannten Befehl. Und irgendwann ioBroker mit Strg+C beenden.
-
@alcalzone sagte in EXPERIMENTELL: JsonL Datenbank für js-controller:
Wenn die Datei auf die doppelte tatsächlich benötigte Größe angewachsen ist, aber erst wenn sie mindestens 1000 Zeilen enthält.
Okay. Meine ursprüngliche objects.json ist 15.447.160 Byte groß. Aktuell hat die objects.jsonl 34.758.338 Byte und 18.553 Zeilen.
Ich denke, damit sollten beide Voraussetzungen für das Packen und Neuschreiben erfüllt sein, oder?
PS: Gerade gesehen, dass zumindest die states.jsonl neu erstellt wurde.
-
@dr-bakterius sagte in EXPERIMENTELL: JsonL Datenbank für js-controller:
Ich denke, damit sollten beide Voraussetzungen für das Packen und Neuschreiben erfüllt sein, oder?
Es kommt nicht auf die Größe an, sondern was man damit macht
Nein, Spaß beiseite. Wie viele Zeilen hatte die originale objects.jsonl?
-
@alcalzone ok, ich hab das jetzt mal mit main.js laufen lassen. Sind jetzt ein Arsch voll logs
allerdings kam auch ne error Meldung im Putty Fenster.
Desweiteren ist beim Start vom Iobroker der simple-api Adapter abgeschmiert und noch paar Ungereimtheiten, die ich grad per seq durchsehe.
du musst mir nur sagen, was du genau haben/sehen willst. -
@crunchip Ich brauche das Profil (wie vorhin beim Adapter), um zu schauen, wo die Last erzeugt wird.
-
@alcalzone sagte in EXPERIMENTELL: JsonL Datenbank für js-controller:
Wie viele Zeilen hatte die originale objects.jsonl?
Tja, wenn ich das wüsste. Ich warte mal bis morgen ab. Wenn da noch nichts neu geschrieben wurde, beende ich mal ioBroker. Da müsste dann ja die Datei geschrieben werden und ich kann nachsehen wie viele Zeilen sie hat.
-
@alcalzone das sind 59 einzelne *-v8.log Dateien, die da angelegt wurden!!
Das ist der letzte Abschnitt vom PuttyfensterThis error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which wa s not handled with .catch(). The promise rejected with the reason: TypeError: Cannot read property 'common' of null at Immediate.<anonymous> (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/@iobroker/db-objects-jsonl/node_m odules/@iobroker/db-objects-redis/lib/objects/objectsInRedisClient.js:3607:37) at runMicrotasks (<anonymous>) at processTicksAndRejections (internal/process/task_queues.js:97:5) ^C================================== > LOG REDIRECT system.adapter.logparser.0 => false [Process stopped] ================================== > LOG REDIRECT system.adapter.logparser.0 => false [system.adapter.logparser.0.logging] ================================== > LOG REDIRECT system.adapter.javascript.0 => false [Process stopped] ================================== > LOG REDIRECT system.adapter.seq.0 => false [Process stopped] ================================== > LOG REDIRECT system.adapter.javascript.0 => false [system.adapter.javascript.0.logging] ================================== > LOG REDIRECT system.adapter.seq.0 => false [system.adapter.seq.0.logging] ================================== > LOG REDIRECT system.adapter.admin.0 => false [Process stopped] ================================== > LOG REDIRECT system.adapter.admin.0 => false [system.adapter.admin.0.logging] root@IoBroker:/opt/iobroker/node_modules/iobroker.js-controller#