solectrus / hosting

Step-by-stypes guides for installing and hosting Solectrus
9 stars 4 forks source link

Geschwindigkeit der Website extrem langsam #41

Closed deThommy closed 6 months ago

deThommy commented 6 months ago

Hallo zusammen,

ich nutze seit rund 2 Wochen Solectrus und finde es super, ich habe jedoch das Problem, dass sämtliche Aufrufe der Website extrem langsam sind. Konkret bedeutet das, dass die einzelnen Ladezeiten der Seiten zwischen 20 und 30 Sekunden dauern. Egal, ob ich das erste mal auf die Seite gehe oder ob ich auf der Seite zwischen den einzelnen Ansichten wechsele (von Aktuell auf Woche, auf Monat etc...).

Das Wechseln der Grafiken geht sofort und ohne Verzögerung, wenn eine Seite geladen wurde.

Zu meinem Setup:

  • Solectrus läuft im Docker auf einer Synology DS218+ mit 10GB Ram mit DSM 7.2

  • NAS ist im LAN mit > 700mbits erreichbar

  • Solectrus wird per MQTT durch EVCC mit Daten gefüttert (EVCC liefert im (Milli)Sekundentakt Daten)

  • sämtliche Container sind grün (running oder healthy, alles ohne offensichtliche Probleme)

  • Auslastung der NAS: CPU konstant bei 5-8%, Ram bei 25-28% (da laufen etliche Services, von Synology eigenen über Adguard, EVCC, etc....)

  • PV-Anlage und Speicher sind von Enphase, aber das dürfte egal sein, da die Daten über EVCC schnell geliefert werden

Welche Daten sind noch relevant, was kann ich zur Problemlösung/-identifikation noch beitragen?

Danke für eure Hilfe!

ledermann commented 6 months ago

Das würde ich gerne gelöst bekommen. Bitte prüfe zunächst, ob wirklich alle Seiten betroffen sind. Konkret:

Falls du dich mit den Browser-DevTools auskennt, kannst du gerne auch ein HAR-File erstellen und hier bereitstellen.

Gibt es Auffälligkeiten in den Logs? Gib mal folgenden Befehl ein (im Ordner, in dem die docker-compose.yml liegt) und klicke dann auf den langsamen Seiten herum. Poste dann den Output (sinnvollerweise als Zip-Archiv, da umfangreich):

docker compose logs -n 100 -f

Ansonsten noch: Zwei Wochen SOLECTRUS ist ja eine kurze Zeit. Hast du einen Import durchgeführt oder enthält InfluxDB wirklich nur die Daten von zwei Wochen?

Je nachdem, wie deine Beobachtungen hier ausfallen, untersuchen wir die Sache weiter.

deThommy commented 6 months ago

Hi, danke für die schnelle Antwort. Vorweg: so 100%ig fit bin ich in alle dem nicht. Fühle mich in GUIs wohler als in der Kommandozeile :)

  • Was ist mit Admin-Login und Einstellungen? Logge dich als Admin ein und klicke auf den Einstellungsseiten hin und her (Allgemein, Strompreis, Einspeisevergütung).
  • Was ist mit Top 10?
  • Was ist mit Einzelwerte?

Aufruf der Seiten (Ladezeit)

Auffällig ist, dass am oberen Ende der Website der Ladebalken 30 Sekunden ganz langsam bis ca. zur Mitte läuft und dann die Seite innerhalb von 1 Sekunde aufgebaut wird (also ab diesen 30 Sekunden ist die Seite praktisch sofort da). Das ist mir beim Stoppen der Ladezeiten gerade aufgefallen.

Das Verhalten ist unabhängig von Browser (getestet mir Firefox, Chrome, Safari auf PC/Mac, Smartphone. Immer 31 Sekunden. Auch unabhängig davon, ob ich als admin eingeloggt bin oder nicht.

Falls du dich mit den Browser-DevTools auskennt, kannst du gerne auch ein HAR-File erstellen und hier bereitstellen.

Gibt es Auffälligkeiten in den Logs? Ist mir bei der Durchsicht aufgefallen: scheinbar zieht er sich keine Forecast Daten, warum weiß ich nicht (Port ist in der Firewall frei, ist vermutlich ein anderes Issue.

Ansonsten sehe ich persönlich keine Auffälligkeiten. Das wirst du besser beurteilen können.

Die Logs der einzelnen Container habe ich als Zip angehängt. Logs.zip

Habe gerade auch noch mal einen Neustart gemacht (siehst du in den Logs), hat aber zu keiner Verbesserung der Performance geführt.

Ansonsten noch: Zwei Wochen SOLECTRUS ist ja eine kurze Zeit. Hast du einen Import durchgeführt oder enthält InfluxDB wirklich nur die Daten von zwei Wochen? Das ist richtig. Das System ist komplett ohne Daten gestartet. Habe also nicht importiert.

deThommy commented 6 months ago

Oh Gott. Versehentlich als completed gepostet 👎 SORRY!

ledermann commented 6 months ago

Ok, das hilft weiter. Ich hatte zunächst Probleme mit InfluxDB vermutet, aber das ist nicht der Fall. Es scheint sich eher um ein Netzwerk-Problem zu handeln.

Der Ladebalken in der App ist übrigens kein verlässlicher Indikator, der schätzt nur.

Eine interessante Auffälligkeit ist die Fehlermeldung im Forecast-Collector:

Error Failed to open TCP connection to api.forecast.solar:443 

Wieso kann der keine https-Verbindung (Port 443) aufbauen? Hast du vielleicht eine zu aggressive Firewall am Start? Blockt oder verzögert Pi-Hole? Adguard?

Im Watchtower-Log findet sich ähnliches:

time="2024-02-22T13:10:05Z" level=warning msg="Could not do a head request for 
  \"influxdb:2.7-alpine\", falling back to regular pull." 
  container=/solectrus-influxdb-1 image="influxdb:2.7-alpine"
time="2024-02-22T13:10:05Z" level=warning msg="Reason: Get \"https://index.docker.io/v2/\":
  dial tcp: lookup index.docker.io on 127.0.0.11:53: 
  read udp 127.0.0.1:36270->127.0.0.11:53: i/o timeout" 
  container=/solectrus-influxdb-1 image="influxdb:2.7-alpine"

Gibt es bei dir Probleme mit DNS? Port 53 ist für die Namensauflösung zuständig.

Im Log der App finden sich immer wieder Seitenabrufe mit recht genau 30s. Kurios. Irgendetwas verzögert bei dir http-Requests.

Insgesamt hat es den Anschein, dass hier irgendetwas mit deinem Netzwerk nicht stimmt. Die Container kommen nicht (oder nur langsam) ins Internet. Ich schlage vor, du schaltest schrittweise mögliche Kandidaten ab, die dafür verantwortlich sein könnten. Firewall in der Synology, Firewall im Internet-Router, Pi-Hole, Adguard etc.

deThommy commented 6 months ago

Hallo @ledermann

vorweg: es läuft jetzt komplett schnell (schneller als 1 Sekunde), damit fast schneller als in deiner Demo-Instanz.

Was habe ich gemacht?

Heißt: es funktioniert nun wie von dir (und mir :)) gewollt. Super schnell. Der Banner ist auch immer noch da (obwohl Firewall aktiv).

Kann das damit zusammenhängen? Verstehe irgendwie nicht, warum es auf einmal funktioniert, wenn doch alle Schutzmaßnahmen (AdGuard, Firewall) wie die letzten 2 Wochen laufen. Ich habe auch keine weiteren Freigaben im Router gemacht.

Ergibt für mich echt keinen Sinn gerade, bin aber froh, dass das jetzt so gut funktioniert. Danke

ledermann commented 6 months ago

Ok, freut mich, dass es funktioniert. Die Firewall hat also den Zugriff der Docker-Container aufs Internet blockiert.

Warum es nach dem Wiedereinschalten der Firewall weiter funktioniert? Meine Vermutung: SOLECTRUS führt einmal täglich einen Update-Check durch, sodass bei Verfügbarkeit eines Updates im UI ein Hinweis erscheint. Durch das einmalige Deaktivieren der Firewall hat dieser Update-Check funktioniert, der jetzt 24h lang nicht erneut versucht wird. Daher macht das Wiedereinschalten der Firewall im Moment nichts aus. Aber morgen wird es dann vermutlich wieder zum gleichen Problem kommen.

Außerdem dürfte es vermutlich weiterhin Probleme mit dem Forecast-Collector und Watchtower geben. Denn die versuchen ja ständig, auf externe Server zuzugreifen (PV-Vorhersage abholen, Updates für Docker-Images suchen). Das wird nach Wiedereinschalten der Firewall vermutlich auch wieder fehlschlagen. In den Logs steht das sicherlich.

Meine Empfehlung ist daher, die Firewall so zu konfigurieren, dass die Docker-Container Zugriff nach draußen haben.

deThommy commented 6 months ago

Hi und danke für deine guten Hinweise!

Ich habe das Ganze heute beobachtet und tatsächlich lief heute morgen alles wieder genau so langsam wie oben beschrieben.

Die Firewall war tatsächlich sehr destruktiv konfiguriert, sprich nach den explizit erlaubten Ports/IPs wird alles geblockt. Der Host (die Synology selbst also) war zwar freigeschaltet, aber das von dir separat aufgebaute SOLECTRUS-Docker-Netzwerk natürlich nicht. Nachdem ich das jetzt auch explizit freigegeben habe funktioniert die Website schnell und auch der Forecast wird zuverlässig gezogen.

Danke, für den guten Einfall + Hilfestellung!

ledermann commented 6 months ago

Freut mich sehr - und danke für die Anerkennung über Ko-Fi ☕ 😄