RAM-Problem - Gladys reagiert nicht mehr

Hallo,

Seit einigen Tagen habe ich enorme Probleme mit meiner Gladys-Instanz, etwa seit dem letzten Update. Wahrscheinlich ein Zufall…

Ich erkläre es: Mein Gladys braucht immer mehr Zeit, um die Seiten zu laden, bis es zum Stillstand kommt. Es reagiert irgendwann nicht mehr auf Ping und ich muss es physisch neu starten.

Ich besitze einen Raspberry PI 4 mit einer SD-Karte und habe keine Probleme mit den anderen Containern (außer wenn die Maschine nicht mehr auf Ping reagiert, natürlich).

Wenn ich etwas die Statistiken anschaue, stelle ich fest, dass mein Speicher sehr schnell anwächst:

Wenn ich den Gladys-Container mit einem Stop + Start neu starte, geht der Speicher auf 0 zurück und wächst dann kontinuierlich bis zur Sättigung an.

Was die Gladys-Logs angeht, sind die letzten paar Zeilen wie folgt:

Forum-Beitrag auf 33.000 Zeichen begrenzt
c6e3b76b2ee4','hourly','ba4e30b3-bb76-4e8b-a61a-feaa42c53cf7',6176.74,'2023-03-03 11:50:25.428 +00:00','2023-03-03 11:50:25.428 +00:00'),('12a018e2-de2b-4064-bc43-37dad72d4418','hourly','ba4e30b3-bb76-4e8b-a61a-feaa42c53cf7',6176.74,'2023-03-03 11:50:49.622 +00:00','2023-03-03 11:50:49.622 +00:00'),('d028d2a3-ae03-4894-8f56-1a75b6bc9f7b','hourly','ba4e30b3-bb76-4e8b-a61a-feaa42c53cf7',6176.75,'2023-03-03 11:50:49.900 +00:00','2023-03-03 11:50:49.900 +00:00'),('00b54221-d81c-4ba1-95ca-f435d5c62f64','hourly','ba4e30b3-bb76-4e8b-a61a-feaa42c53cf7',6176.75,'2023-03-03 11:50:53.704 +00:00','2023-03-03 11:50:53.704 +00:00'),('287dac16-70bf-4d72-b44c-e3fefba1b122','hourly','ba4e30b3-bb76-4e8b-a61a-feaa42c53cf7',6176.77,'2023-03-03 11:50:56.318 +00:00','2023-03-03 11:50:56.318 +00:00'),('93b65da7-7ea2-49e6-a797-8c715b169425','hourly','ba4e30b3-bb76-4e8b-a61a-feaa42c53cf7',6176.77,'2023-03-03 11:51:09.528 +00:00','2023-03-03 11:51:09.528 +00:00'),('a68474c1-0118-4580-88a8-a1a0298dc5db','hourly','ba4e30b3-bb76-4e8b-a61a-feaa42c53cf7',6176.79,'2023-03-03 11:51:10.957 +00:00','2023-03-03 11:51:10.957 +00:00'),('13a8eb25-0bb3-44c7-a541-7fd7ccd66c82','hourly','ba4e30b3-bb76-4e8b-a61a-feaa42c53cf7',6176.79,'2023"..

Wenn ich weiter im Forum blättere und suche, habe ich den Eindruck, dass es in etwa so aussieht:

In meiner Erinnerung habe ich in letzter Zeit Folgendes gemacht:

  • MQTT-Elemente hinzugefügt, um Preise in Bezug auf meinen Energieverbrauch/Erzeugung anzuzeigen
  • Ein MQTT-Element geändert, weil der Name des Topics nicht richtig war
  • 2 Diagramme gelöscht, weil ich dachte, dass das der Grund für die Langsamkeit war
  • Eine Bereinigung durchgeführt (unmöglich zu sagen, ob sie korrekt abgeschlossen wurde, da ich 24 Stunden später keinen Zugriff mehr hatte)

Ich glaube, das Problem kommt von meiner DB mit mehr als 14 GB. Ich hatte die dumme Idee, alles zu speichern.
Man lernt aus Fehlern.

Allerdings, da das System direkt im Eimer ist, wie kann ich die DB manuell ändern, um die Daten in t_device_feature_state zu löschen, um anzufangen?
Ich habe die DB exportiert und DB Browser unter Windows verwendet, aber ist es möglich, den Container zu stoppen und dann manuell die Manipulation an der DB durchzuführen?
Ich bin ein Anfänger in SQLite und noch mehr in einem Container :confused:

Kann mir jemand erklären, wie man SQL-Befehle direkt in Docker ausführt? :frowning:
Der Befehl SQlite3 existiert nicht. Muss man das Paket installieren?

Entschuldige @Kevin für die Stille… Leider habe ich keine Ahnung, wie man das macht :confused:

Hallo,

Tatsächlich ist sqlite3 nur im Container gladys installiert, aber Manipulationen am laufenden Container sind keine gute Idee.

Der beste (und einfachste, falls du nicht vertraut mit der Kommandozeile bist) Weg ist:

  • den Gladys-Container stoppen
    docker stop gladys
  • ein Backup der Datenbank erstellen
    cp /var/lib/gladysassistant/gladys-production.db /var/lib/gladysassistant/gladys-production.db.backup
  • die Datei /var/lib/gladysassistant/gladys-production.db auf einen anderen Rechner kopieren
  • einen Editor wie DBBrowser verwenden
  • deine Manipulationen durchführen (denke daran, die Änderungen zu speichern)
  • die neue Datenbank nach /var/lib/gladysassistant/ zurückkopieren
  • Gladys starten
    docker start gladys

Hallo,

Danke für deine ausführliche Antwort :slight_smile:

Ich habe kein Problem mit Befehlen in der Eingabeaufforderung, ich war C# .NET-Entwickler, aber ich war eher an die Manipulation von gespeicherten Prozeduren, Transaktionen und Ähnlichem auf SQL-Server-Instanzen mit SSMS gewöhnt… Und da ich keine Erfahrung mit Docker oder SQLite habe, war ich etwas verloren und brauchte eine kleine Anleitung zum Einstieg :smiling_face:

Ich habe bereits die Datenbank nach dem Stoppen des Gladys-Containers wiederhergestellt. Und ich mache einige Manipulationen mit dem DB-Browser. Allerdings hatte ich neben der Datenbank (Cache, Warteschlange, …) zwei Dateien (***.DB-SHM, ***.DB-WAL) und ich frage mich, ob ich einen Merge erzwingen muss oder so etwas? Oder kann ich diese Dateien einfach ignorieren, ohne meine Datenbank zu beschädigen, wenn ich meine zukünftige modifizierte Datenbank später wiederherstelle?

Nochmals vielen Dank für deine Hilfe @cicoub13! :slightly_smiling_face:

@guim31: Kein Problem, trotzdem danke für deine Antwort :slight_smile:

Kein Problem mit diesen Dateien, du kannst sie ignorieren. Wenn Gladys neu startet, beginnt der SHM von vorne. Der WAL enthält die Rollback-Prozeduren im Fehlerfall. Aber hier wurde die Verbindung zur Datenbank sauber getrennt.

Alles klar, perfekt. Vielen Dank für diese zusätzliche Information. Ich werde so vorgehen.

Äh nein, ich bin nicht einverstanden

Normalerweise, wenn du Gladys richtig stoppst, sollten diese Dateien verschwinden (sie existieren nur, wenn ein SQLite-Programm auf die Datenbank zugreift). Man muss sichergehen, dass dies der Fall ist, bevor man die Datenbankdatei kopiert, oder man kopiert alle drei Dateien.

Wenn du eine neue SQLite-Datenbank neben alten db-shm- / db-wal-Dateien kopierst, riskierst du eine Datenbankkorruption.

Für meinen Teil hat es funktioniert, indem ich diese Dateien ignoriert habe. War das Zufall? Ich weiß nicht. Danach war Gladys zwar korrekt ausgeschaltet, aber bei den 14 GB vermute ich, dass er es nicht geschafft hat, das Notwendige mit den beiden anderen Dateien zu tun.