Performance-Optimierung von jsonlist2-Aufruf durch FTUI

Begonnen von markus_fhem, 29 September 2019, 22:27:03

Vorheriges Thema - Nächstes Thema

markus_fhem

Hallo in die Runde.

Folgende Herausforderung habe ich gerade, immer wieder im System eine signifikante und spürbare Anzahl und Dauer an freezes zu eliminieren (der Effekt ist nicht neu, nun aber endlich auf der ToDo-Liste oben angekommen).
Mit freezemon (Attribute fm_CatchCmds, fm_CatchFnCalls und fm_logFile gesetzt) dahintergekommen, dass reproduzierbar Aufrufe von jsonlist2 durch TabletUI (daher auch hier im Forum gepostet) der Grund für die ganz langen Systemhänger sind, so dass auch das HMLanGw kurzzeitig auf disconnected wechselt. Die Gegenprobe, das Tablet für ein paar Tage ausgeschaltet zu lassen, hat die Anzahl der Freezes auf <10/Tag mit max. 1-2 sec reduziert, womit ich voll und ganz leben kann. Sonst sind es, je nach Nutzung des Tablets >100/Tag mit immer mind. 5 sec.

Entlanggehangelt habe ich mich dabei anhand dieses Themas, welches mir ähnlich gelagert schien, die Lösung aber nicht passt: https://forum.fhem.de/index.php/topic,96060.0/all.html
Als Hardware kommt bei mir wie auch dort ein Raspberry 3 zum Einsatz, der sonst keine weiteren Aufgaben neben FHEM hat.
jsonlist2 gibt als Ergebnis "totalResultsReturned":573 und ist in eine Datei umgeleitet ca. 2,5MB groß.

Dies ist ein repräsentativer File, den freezemon generiert hat:
=========================================================
[Freezemon] myFreezemon: possible freeze starting at 21:19:18, delay is 6.143 possibly caused by: cmd-jsonlist2 .* (WEB) fn-ReadFn(WEB_192.168.178.49_62017)
2019.09.29 21:19:17.072 4: WEB_192.168.178.49_62017 GET /fhem/?cmd=jsonlist2%20.*%20&fwcsrf=csrf_xyz&XHR=1&_=1569784751598; BUFLEN:0
2019.09.29 21:19:17.072 5: Cmd: >jsonlist2 .*<
--- log skips     6.585 secs.
2019.09.29 21:19:23.688 5: [Freezemon] myFreezemon: Long running Command detected jsonlist2 .* :WEB - 6.6155 seconds
2019.09.29 21:19:24.142 4: WEB: /fhem/?cmd=jsonlist2%20.*%20&fwcsrf=csrf_xyz&XHR=1&_=1569784751598 / RL:200038 / application/json; charset=utf-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate

2019.09.29 21:19:24.143 5: [Freezemon] myFreezemon: Long function call detected ReadFn:WEB_192.168.178.49_62017 - 7.071929 seconds
2019.09.29 21:19:24.143 4: HMUARTLGW HmLGW1:keepAlive ready: disconnected
2019.09.29 21:19:24.143 4: HMUARTLGW HmLGW2:keepAlive ready: disconnected
2019.09.29 21:19:24.143 5: [Freezemon] myFreezemon: ----------- Starting Freeze handling at 2019.09.29 21:19:24.143 ---------------------
[Freezemon] myFreezemon: possible freeze starting at 21:19:18, delay is 6.143 possibly caused by: cmd-jsonlist2 .* (WEB) fn-ReadFn(WEB_192.168.178.49_62017)


Auch ein Aufruf von time /opt/fhem/fhem.pl 7072 "jsonlist2 .*" bringt mir mehrfach Ergebnisse in dieser Größenordnung, was verglichen mit den Werten in dem anderen Thema deutlich langsamer ist.
0.43 user
0.12 system
0:07.84 elapsed
7% CPU


Nun ist meine Frage, wo ich idealerweise ansetze, um dieses Phänomen in den Griff zu bekommen.
Braucht TabletUI tatsächlich ein jsonlist2 .* oder lässt sich das durch FILTER noch weiter einschränken, bzw. hätte das überhaupt einen Effekt auf die Laufzeit?
Welche weiteren Infos sind noch von mir zur Fehlersuche erforderlich?

Vielen Dank für ein paar Tipps und Anstubser in die richtige Richtung.

Thorsten Pferdekaemper

Hi,
soweit ich bisher gesehen habe, macht FTUI kein jsonlist2 .*, sondern mit der Liste der Devices, die auf der Seite vorkommen.
...ich habe jetzt mal ganz kurz ins Coding geschaut. Es sieht so aus. dass das ".*" dann vorkommt, wenn auf der FTUI-Seite gar keine Devices registriert sind. D.h. es sind entweder gar keine Widgets auf der Seite oder zumindest keine, die sich auf ein spezifisches Device beziehen.
Kann das bei Dir der Fall sein?
Gruß,
   Thorsten
FUIP