NEWS
EXPERIMENTELL: JsonL Datenbank für js-controller
-
@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#
-
@apollon77 hab mich grad daran erinnert, hab ja noch ein script laufen, das liefert folgendes
[{"command":"iobroker.js-controller","pid":"9819","cpu":61.9,"mem":10.4,"vmem":1169840,"rss":583488,"start":"20:50","time":"33:43"},{"command":"io.javascript.0","pid":"11149","cpu":12.9,"mem":6.2,"vmem":1167828,"rss":350740,"start":"20:52","time":"6:49"},{"command":"io.admin.0","pid":"9986","cpu":1,"mem":3,"vmem":929792,"rss":168668,"start":"20:50","time":"0:34"},{"command":"io.iogo.0","pid":"10729","cpu":5.4,"mem":2.4,"vmem":1947004,"rss":136788,"start":"20:52","time":"2:53"},{"command":"io.simple-api.0","pid":"12375","cpu":1.2,"mem":2.1,"vmem":732936,"rss":120760,"start":"20:53","time":"0:38"},{"command":"io.influxdb.2","pid":"10695","cpu":4.4,"mem":1.8,"vmem":675636,"rss":103412,"start":"20:51","time":"2:21"},{"command":"io.influxdb.0","pid":"10516","cpu":4.8,"mem":1.8,"vmem":667648,"rss":101056,"start":"20:51","time":"2:36"},{"command":"io.sonoff.0","pid":"12456","cpu":4.9,"mem":1.7,"vmem":664560,"rss":97656,"start":"20:53","time":"2:32"},{"command":"io.backitup.0","pid":"10016","cpu":0.1,"mem":1.6,"vmem":663928,"rss":93176,"start":"20:50","time":"0:05"},{"command":"io.iot.0","pid":"11123","cpu":0.2,"mem":1.5,"vmem":793480,"rss":88832,"start":"20:52","time":"0:07"},{"command":"io.influxdb.1","pid":"10531","cpu":0.4,"mem":1.5,"vmem":654816,"rss":88220,"start":"20:51","time":"0:14"},{"command":"io.shelly.0","pid":"11502","cpu":1,"mem":1.5,"vmem":660668,"rss":88220,"start":"20:52","time":"0:33"},{"command":"io.radar2.0","pid":"11427","cpu":0.4,"mem":1.4,"vmem":911532,"rss":82720,"start":"20:52","time":"0:13"},{"command":"io.wled.0","pid":"13018","cpu":1.6,"mem":1.4,"vmem":634420,"rss":79948,"start":"20:54","time":"0:49"},{"command":"io.sourceanalytix.0","pid":"12471","cpu":1.4,"mem":1.3,"vmem":632440,"rss":78008,"start":"20:53","time":"0:44"},{"command":"io.web.0","pid":"12980","cpu":0.3,"mem":1.3,"vmem":648700,"rss":77616,"start":"20:54","time":"0:11"},{"command":"io.zigbee.0","pid":"13072","cpu":0.4,"mem":1.3,"vmem":780548,"rss":77480,"start":"20:54","time":"0:12"},{"command":"io.tr-064.0","pid":"12692","cpu":0.3,"mem":1.3,"vmem":643116,"rss":76360,"start":"20:53","time":"0:09"},{"command":"io.virtualpowermeter.0","pid":"12743","cpu":0.6,"mem":1.3,"vmem":648892,"rss":76148,"start":"20:53","time":"0:19"},{"command":"io.telegram.0","pid":"12497","cpu":0.4,"mem":1.3,"vmem":783552,"rss":75044,"start":"20:53","time":"0:13"},{"command":"io.info.0","pid":"10706","cpu":0.1,"mem":1.3,"vmem":781448,"rss":74792,"start":"20:51","time":"0:05"},{"command":"io.telegram.1","pid":"12651","cpu":0.4,"mem":1.3,"vmem":847456,"rss":74664,"start":"20:53","time":"0:12"},{"command":"io.shuttercontrol.0","pid":"11674","cpu":0.2,"mem":1.3,"vmem":645352,"rss":74332,"start":"20:52","time":"0:07"},{"command":"io.linux-control.0","pid":"11164","cpu":0.6,"mem":1.2,"vmem":907652,"rss":72120,"start":"20:52","time":"0:19"},{"command":"io.fully-tablet-control.0","pid":"10307","cpu":0.3,"mem":1.2,"vmem":642736,"rss":70696,"start":"20:51","time":"0:12"},{"command":"io.history.0","pid":"10471","cpu":0.4,"mem":1.2,"vmem":706744,"rss":69844,"start":"20:51","time":"0:14"},{"command":"io.socketio.0","pid":"12434","cpu":0.1,"mem":1.1,"vmem":709680,"rss":66284,"start":"20:53","time":"0:05"},{"command":"io.smartcontrol.0","pid":"12408","cpu":0.3,"mem":1.1,"vmem":638636,"rss":65908,"start":"20:53","time":"0:09"},{"command":"io.tankerkoenig.0","pid":"12482","cpu":0.2,"mem":1.1,"vmem":901992,"rss":64736,"start":"20:53","time":"0:06"},{"command":"io.pollenflug.0","pid":"11393","cpu":0.1,"mem":1.1,"vmem":705264,"rss":64552,"start":"20:52","time":"0:05"},{"command":"io.unifi.0","pid":"30663","cpu":5.8,"mem":1.1,"vmem":635608,"rss":63940,"start":"21:43","time":"0:06"},{"command":"io.alexa2.0","pid":"10001","cpu":0.2,"mem":1.1,"vmem":903352,"rss":63756,"start":"20:50","time":"0:08"},{"command":"io.chromecast.0","pid":"10225","cpu":0.1,"mem":1.1,"vmem":1665116,"rss":63296,"start":"20:51","time":"0:06"},{"command":"io.logparser.0","pid":"11179","cpu":0.2,"mem":1.1,"vmem":619548,"rss":63196,"start":"20:52","time":"0:09"},{"command":"io.trashschedule.0","pid":"12708","cpu":0.1,"mem":1,"vmem":634032,"rss":60344,"start":"20:53","time":"0:04"},{"command":"io.jarvis.0","pid":"11134","cpu":0.1,"mem":1,"vmem":633720,"rss":60168,"start":"20:52","time":"0:04"},{"command":"io.ble.0","pid":"10038","cpu":0.3,"mem":1,"vmem":617376,"rss":60064,"start":"20:51","time":"0:10"},{"command":"io.ping.0","pid":"11378","cpu":0.4,"mem":1,"vmem":619148,"rss":60064,"start":"20:52","time":"0:13"},{"command":"io.milight-smart-light.0","pid":"11359","cpu":0.1,"mem":1,"vmem":634572,"rss":59776,"start":"20:52","time":"0:04"},{"command":"io.wiffi-wz.0","pid":"12997","cpu":0.1,"mem":1,"vmem":634844,"rss":59232,"start":"20:54","time":"0:05"},{"command":"io.sayit.0","pid":"11445","cpu":0.1,"mem":1,"vmem":615444,"rss":57984,"start":"20:52","time":"0:04"},{"command":"io.email.0","pid":"10277","cpu":0.1,"mem":1,"vmem":615524,"rss":57080,"start":"20:51","time":"0:03"},{"command":"io.text2command.0","pid":"12672","cpu":0.1,"mem":1,"vmem":614948,"rss":56676,"start":"20:53","time":"0:04"},{"command":"io.mihome.0","pid":"11341","cpu":0.1,"mem":1,"vmem":615708,"rss":56172,"start":"20:52","time":"0:04"},{"command":"io.yeelight-2.0","pid":"13045","cpu":0.1,"mem":1,"vmem":631564,"rss":55944,"start":"20:54","time":"0:04"},{"command":"io.broadlink2.0","pid":"10061","cpu":0.1,"mem":0.9,"vmem":614528,"rss":55520,"start":"20:51","time":"0:04"},{"command":"io.seq.0","pid":"11475","cpu":0.1,"mem":0.9,"vmem":614256,"rss":54000,"start":"20:52","time":"0:04"},{"command":"io.vis-inventwo.0","pid":"12774","cpu":0.1,"mem":0.9,"vmem":613384,"rss":53872,"start":"20:54","time":"0:03"}]
-
@alcalzone es wurde ne 8,1mb große Datei angelegt, weiß auch nicht ob das so korrekt ist, da er nach dem Umwandel Befehl ne ganze Reihe
Move: unknown source....
ausgegeben hat,jedenfalls ist die Datei zu groß um hier hochgeladen zu werden, wohin soll ich sie schicken?
-
@crunchip sagte in EXPERIMENTELL: JsonL Datenbank für js-controller:
das sind 59 einzelne *-v8.log Dateien, die da angelegt wurden!!
Öh doof, das ist dann je eine pro Adapterprozess. Kannst du irgendwie ausmachen, welche davon zum js-controller gehört hat? Nur die dann bitte umwandeln (oder jede in eine eigene Datei, nicht alle in dieselbe
processed.txt
).Die Dateien kannst du zippen und mir per Mail schicken.
-
@dr-bakterius Es kann auch sein, dass neue Objekte dazu gekommen sind und dass demnach die Bedingung "doppelt so groß wie nötig" erst später erfüllt wird.
-
@alcalzone sagte in EXPERIMENTELL: JsonL Datenbank für js-controller:
nicht alle in dieselbe
haha, du bist lustig, hab doch geschrieben, es wurde eine Datei durchs umwandeln angelegt. Die hab ich auch schon verschickt. Guck mal, ob das was brauchbares ist, wenn nicht, mach ichs nochmal, da ich die Dateien schon wieder rausgelöscht hab
Ich mach das jetzt nochmal,
anstatt mit main.js, nehm ich controller.js, das Ergebnis lass ich dir dann zukommen -
@crunchip sagte in EXPERIMENTELL: JsonL Datenbank für js-controller:
es wurde eine Datei durchs umwandeln angelegt
Ja, aber alle Befehle haben die gleiche Datei als Ziel gehabt und ich fürchte jeweils überschrieben. Die von dir gesendete Datei enthält die Auswertung für iobroker.shelly.
Probiers mal so:
for file in *-v8.log; do node --prof-process --preprocess "$file" > "OUT_$file"; done
Das wertet alle aus und schreibt das Ergebnis jeweils in ne eigene Datei, die mit "OUT_" beginnt.
-
@alcalzone ok, mach ich gleich, allerdings bin ich am Rätseln, ob der Befehl "node --prof ..." das ständige starten des controllers verursacht. Siehe https://forum.iobroker.net/post/581582
ich habe nämlich, nachdem ich iobroker manuell starte 20 Einträge.
iobroker wurde um 10:34 beendet, siehe log, 10:39 Befehl node --prof ausgeführt und anschließend iobroker manuell gestartet
Edit: ok, das umwandeln hat geklappt, hab nun alle einzeln, wenn du mir noch verrätst wo ich sehen kann, welche die für den controller ist? die größte Datei hat 83.8mb
-
@crunchip Pack sie am besten alle in eine ZIP, damit sollte sich die Größe massiv reduzieren, sodass du mir ggf. einfach alle per Mail schicken kannst. Ich will nicht ausschließen, dass der Befehl selbst Probleme verursacht, hab aber gerade keinen Ansatz woran das liegt.
-
@alcalzone ok, mach ich
-
Die Umstellung auf meinem Testsystem lief problemlos durch. Werde nun das ganze testen und beobachten.
-
@alcalzone bekomms grad nicht gebacken, wie ich die zip Datei versenden könnte, da sie immer noch 32,5mb und zu groß für Mail ist. Muss ich mal schauen oder zur Not teil ich es auf.
-
@crunchip Dropbox? Google Drive? und Freigeben?
-
Wir haben ein potentielles Performance-Problem im JS-Controller identifiziert. Das müsste so 1:1 auch die klassische File DB betreffen.