Problem mit jsonlist2 performance - autocomplete funktioniert nicht

Begonnen von socram, 09 September 2023, 09:42:16

Vorheriges Thema - Nächstes Thema

socram

Moin,

weil mein autocomplete über Codemirror nicht mehr funktioniert hat, habe ich ein wenig Fehlersuche betrieben.
Mit einem alten Backup funktioniert noch alles, sodass ich mal beide verglichen habe. Der einzige Unterschied ist, dass meine FHEM-Umgebung gewachsen ist und eine Reihe weiterer Geräte dazugekommen ist.

Der Aufruf von jsonlist2 dauert nun über eine Sekunde, was wohl dann auch dazu führt, dass autocomplete nicht mehr funktioniert.
Du darfst diesen Dateianhang nicht ansehen.
Du darfst diesen Dateianhang nicht ansehen. 

Ich habe die jsonlist2-Ausgabe mal durchgesehen und mir fällt hier nichts auf, was man entfernen könnte. Das NAS (Synology 918+) ist eine Ecke performanter als der Raspi4, sodass das eigentlich kein Problem sein sollte.

Für Ideen wäre ich euch sehr dankbar!

rudolfkoenig

Auf einem Celeron J4115 (grob das Gleiche, wie das in dem 918+ eingebaute J3455) dauert das Generieren und uebers Netzerk Abholen von 518KB an JsonList2 0.05s.
Hochgerechnet auf 1.86MB waere das 0.18s, damit 32-mal schneller, als das 918+.

Netzwerk "kaputt"?

socram

Erst einmal vielen lieben Dank für deine Antwort. Alles andere ist absolut performant auf dem Gerät (z. B. die Nextcloud, GitLab, etc.) und die CPU-Auslastung ist auch kein Problem. Kann ich das ganze irgendwie weiter eingrenzen, was da genau die Generierung von jsonlist2 ausbremst?

rudolfkoenig

Gibt es aktivierte allowed Instanzen?
Ansonsten koennte man versuchen Teilbereiche abzuholen (der Parameter ist ein devSpec), und so das Problem einzugrenzen, auch wenn das sehr muehselig ist.

socram

Ja, es gibt allowedWEB, allowed_WEBLAN und allowed_WEBphone. allowed_WEBLAN wird nicht mehr benutzt, deshalb habe ich den mal gelöscht, das macht es aber auch nicht besser.

Und was die Mühseligkeit angeht, wäre ich dazu zur Not auch bereit, wenn es das Problem löst. Tatsächlich ist das autocomplete bei den vielen Standardnamen in Kombination mit Aliasen nämlich sehr hilfreich und vielleicht kann ich damit ja auch noch jemand anderem mit dem gleichen Problem in Zukunft helfen. Wie genau stelle ich das denn an?

rudolfkoenig

Wird es schneller, wenn man die allowed-Instanzen deaktiviert (attr allowed.* disabled 1)?

ZitatWie genau stelle ich das denn an?
Man kann in der FHEM Eingabezeile jsonlist2 eingeben, und schauen, wie lange es dauert.
Danach "jsonlist2 room=XXX" oder "jsonlist2 TYPE=YYY" (alle Raeume oder Modultypen der Reihe nah, der Fantasie sind keine Grenzen gesetzt), und so rausfinden, ob nicht doch einzelne oder wenige Elemente den Befehl ausbremsen.

socram

Vielen Dank, das war schonmal sehr hilfreich. Ich bin jetzt alle Räume durchgegangen.
Das hat bei mir die Ausführungszeit auf (immernoch lange) 694ms reduziert, nachdem ich devices rausgeworfen habe, die ich nicht mehr brauchte inkl. FileLogs, die aufgrund logdb ohnehin überflüssig waren. Mit "allowed.* disable 1" merkt man kaum Besserung - (694 ms mit deaktivierten allowed und über 700 ohne).

Dadurch ist das ganze nun schon schneller geworden, autocomplete geht aber leider immer noch nicht und ich vermute mal, dass das mit der immernoch langen Ausführungszeit zusammenhängt. Ich investiere hier gerne auch mehr Zeit, um das Problem zu lösen, mir fehlen aber leider gerade weiter Ansatzpunkte.

rudolfkoenig

Wieviele Geraete sind noch uebrig, bzw. wie gross ist das zurueckgelieferte JSON jetzt?

socram

"totalResultsReturned":432 bei 142 KB.
Count: 431 devices in total.

rudolfkoenig

Irgendetwas ist da noch faul.
Meine Testinstallation mit vergleichbaren CPU ist groesser, und uebers Netz brauche ich 50ms statt 700.
Lokal auf dem gleichen Rechner dauert es laut wget 0.001s.
wget -O /dev/null 'http://localhost:8083/fhem?cmd=jsonlist2&fwcsrf=csrf_1234567890'
Womoeglich verzoegert dein Browser?

socram

#10
--2023-09-12 11:10:42--  http://socram:*password*@localhost:8085/fhem?cmd=jsonlist2
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:8085... connected.
HTTP request sent, awaiting response... 401 Authorization Required
Authentication selected: Basic realm="Login required"
Reusing existing connection to localhost:8085.
HTTP request sent, awaiting response... 200 OK
Length: 1488824 (1.4M) [text/html]
Saving to: '/dev/null'

/dev/null                     100%[=================================================>]   1.42M  --.-KB/s    in 0.002s

2023-09-12 11:10:44 (696 MB/s) - '/dev/null' saved [1488824/1488824]
und zum Vergleich:
PS C:\Users\socram> wget -O /dev/null 'http://socram:*password*@nas:8085/fhem?cmd=jsonlist2'
--2023-09-12 11:12:35--  http://socram:*password*@nas:8085/fhem?cmd=jsonlist2
Resolving nas (nas)... 192.168.25.79
Connecting to nas (nas)|192.168.25.79|:8085... connected.
HTTP request sent, awaiting response... 401 Authorization Required
Authentication selected: Basic realm="Login required"
Reusing existing connection to nas:8085.
HTTP request sent, awaiting response... 200 OK
Length: 1490421 (1,4M) [text/html]
Saving to: '/dev/null'

/dev/null                     100%[=================================================>]   1,42M  --.-KB/s    in 0,1s

2023-09-12 11:12:36 (14,0 MB/s) - '/dev/null' saved [1490421/1490421]

Verschiedene Browser (Chrome und Firefox) hatte ich auch schon probiert. Und ansonsten ist FHEM sehr performant auf dem NAS.

Du darfst diesen Dateianhang nicht ansehen.

rudolfkoenig

Wenn wget das in 0.1s bekommt, dann wird eine weitere Optimierung in FHEM nicht mehr viel helfen.

socram

Da bin ich einerseits bei dir, allerdings habe ich das ganze mit mehreren Browsern probiert und ich habe den Eindruck, dass wget die Zeit nicht richtig anzeigt, weil curl das richtig macht:

PS C:\Users\socram>  curl -w "@curl-format.txt" -o NUL -s "http://socram:*password*@nas:8085/fhem?cmd=jsonlist2"
time_namelookup:  0.015735s
        time_connect:  0.019153s
     time_appconnect:  0.000000s
    time_pretransfer:  0.019391s
       time_redirect:  0.000000s
  time_starttransfer:  0.724601s
                     ----------
          time_total:  0.832651s

rudolfkoenig

Mit curl kriege ich auch andere, mit deinen vergleichbare Zahlen.
Sind nach Gefuehl realistischer, als die Werte von wget.

socram

Nachdem ich das Problem leider nach wie vor nicht beheben konnte, habe ich einmal configDB eingerichtet und meine Konfiguration übertragen, um hier ein Problem mit der .cfg auszuschließen.

Außerdem habe ich fhem auf ein neues Gerät umgezogen, das performanter ist als der Synology Celeron (i5-12400).

Beides hat leider nicht geholfen und ich wüsste zu gerne, wie man hier noch weiter nach Fehlern kann, weil ich das Feature ausgesprochen praktisch finde.