Ankündigung

Einklappen
Keine Ankündigung bisher.

SmarthomeNG stürzt ab

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • henfri
    antwortet
    Hallo,

    kann mir hier jemand weiterhelfen?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo Bernd,

    der Modus ist tatsächlich foreground. Dann wird es daran liegen, dass es keinen Logentry gibt.

    Wie kommen wir dem Problem jetzt auf die Schliche. Es entsteht ja, sobald ich maxage nutze.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Zitat von henfri Beitrag anzeigen
    es wird kein Log-Eintrag erzeugt, der besagt "keine Threads mehr, starte neu". Das komplette (!) Log eines Vorgangs ist im ersten Post.
    Für mich sieht der erste Post nicht vollständig aus. Wenn SHNG neu startet, dann mit den Informationen wie von MMatt24 gepostet unter der Voraussetzung, das SHNG nicht in einem der Modi 'foreground', 'debug' oder 'interactive' arbeitet.

    Code:
    2022-05-21 16:37:20 NOTICE lib.smarthome -------------------- SmartHomeNG restarting, initiated by SmartHomeNG (scheduler started too many worker threads (30)) --------------------

    Einen Kommentar schreiben:


  • MMatt24
    antwortet
    Hallo,
    ich hatte das gleiche Problem. Bei mir ist sind die Worker minütlich vollgelaufen und es erfolgte aller halben Stunden ein Neustart. Habe einige Zeit suchen müssen bis ich das Problem gefunden habe.
    Letztendlich war es eine gleich benannte Counter-Variable in mehreren ähnlichen Logiken. Habe nun diese Variable überall umbenannt und der Fehler ist weg. Lief wie es war, viele Jahre. Erst seit dem Update auf 1.9.2 ist dies aufgefallen. Eventuell bestand das Problem schon früher, ggf ist aber die Workerbegrenzung auf 20 bzw. 30 neu.

    Das Log sah so aus:
    ...
    2022-05-21 16:35:17 ERROR lib.scheduler Needing more worker threads than the specified maximum of 20! (28 worker threads active)
    2022-05-21 16:36:18 ERROR lib.scheduler Needing more worker threads than the specified maximum of 20! (29 worker threads active)
    2022-05-21 16:37:20 ERROR lib.scheduler Needing more worker threads than the specified maximum of 20! (30 worker threads active)
    2022-05-21 16:37:20 WARNING lib.scheduler Worker-Threads: idle: 17, logics.SD: 13
    2022-05-21 16:37:20 NOTICE lib.smarthome -------------------- SmartHomeNG restarting, initiated by SmartHomeNG (scheduler started too many worker threads (30)) --------------------
    2022-05-21 16:37:35 NOTICE lib.smarthome -------------------- SmartHomeNG stopped --------------------
    2022-05-21 16:37:36 NOTICE lib.smarthome -------------------- Init SmartHomeNG v1.9.2-master (cc57a0ad) --------------------

    Gruß
    Matthias

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    es wird kein Log-Eintrag erzeugt, der besagt "keine Threads mehr, starte neu". Das komplette (!) Log eines Vorgangs ist im ersten Post.
    Daher hatte ich auch den Titel "stürzt ab" gewählt, da es für mich nicht nach einem vorbeugendem Neustart aussah.

    Wie wäre denn die Fehlermeldung in dem Fall?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • aschwith
    antwortet
    Unabhängig davon, was bei Dir genau zu dem Neustart führt, sollten wir erstmal sicherstellen, dass bei einem absichtlich von smarthomNG getriggerten Neustart auch definitiv ein Logeintrag erzeugt wird. Kannst Du das bestätigen, oder gibt es hier ein Problem?

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    ich habe jetzt eine Weile keine restarts mehr.
    Zunächst hatte ich das database Plugin deaktiviert. Als das die restarts behoben hat, habe ich es wieder aktiviert und meine database_maxage: Parameter auskommentiert - das war eine Änderung die ich eingeführt hatte, bevor die Neustarts anfingen.

    Es liegt also an database_maxage.

    Wie kommen wir der Sache weiter auf den Grund?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hm, sollte es dann nicht einen Log Eintrag geben, der das besagt?

    Wie auch immer:
    Wie finde ich den Grund für die zu vielen Worker?

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Zitat von henfri Beitrag anzeigen
    Seitdem habe ich keine weiteren Abstürze gehabt
    Es sind keine Abstürze!!! Die Neustarts werden von SmartHomeNG bewusst zur Sicherstellung der Lauffähigkeit ausgelöst.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    ich habe jetzt das Database-Plugin deaktiviert und alle anderen aktiviert gelassen.
    Seitdem habe ich keine weiteren Abstürze gehabt - natürlich funktionieren die Resourcen-Graphen nicht.
    Auch gab es keine Meldungen mehr wie "Needing more worker threads than the specified maximum of 20! (20 worker threads active)"

    Wie komme ich jetzt weiter?

    Seit meinem letzten Commit in mein eigenes Git habe ich folgendes gemacht.
    Neue logiken
    Nachdimmen_Gaestebad:
    Nachdimmen_Kinderbad:
    Huehnerklappe:
    telegram_bot:
    Heizung_wieder_an:

    Neue Plugins:
    telegram
    tasmota
    fritzbox

    alexarc4shng: Multifaktor
    database_maxage
    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,
    Zitat von Msinn Beitrag anzeigen
    Das bedeutet auch, dass die remove_older Tätigkeiten extem schnell fertig sind (sie arbeiten erstmal nur im RAM), weshalb Du davon auch nichts siehst. Das dumpen hingegen benötigt entsprechend Zeit in der Datenbank und ist daher eher ein Langläufer.
    Ok, aber wenigstens die log-einträge sollte ich doch sehen (klar, den Scheduler erwische ich vielleicht nicht).
    Wie auch immer: Dem entnehme ich, dass es eher nicht am remove_old liegt?

    Seit ich alle Plugins außer knx und database deaktiviert habe und 9GB swap spendiert habe, sieht es besser aus:
    SH-NG1.png


    Es werden die 30 Worker nicht mehr erreicht.
    Neustarts gab es aber:
    Code:
    root@homeserver:~/smarthomeNGconfig/var/log# grep -i "SmartHomeNG initialization finished" smarthome-warnings.log
    2022-04-24 06:52:12 NOTICE lib.smarthome -------------------- SmartHomeNG initialization finished --------------------
    root@homeserver:~/smarthomeNGconfig/var/log# grep -i "SmartHomeNG initialization finished" smarthome-warnings.log.2022-04-23
    2022-04-23 02:20:46 NOTICE lib.smarthome -------------------- SmartHomeNG initialization finished --------------------
    2022-04-23 09:15:18 NOTICE lib.smarthome -------------------- SmartHomeNG initialization finished --------------------
    2022-04-23 16:08:35 NOTICE lib.smarthome -------------------- SmartHomeNG initialization finished --------------------
    2022-04-23 16:29:37 NOTICE lib.smarthome -------------------- SmartHomeNG initialization finished --------------------
    2022-04-23 23:29:03 NOTICE lib.smarthome -------------------- SmartHomeNG initialization finished --------------------
    Es gibt ja keine Einträge im Log, welche darauf hin weisen dass SH sich selbst beendet.
    Sollte es diese nicht geben?
    Kann es sein, dass SH extern (vom Kernel) beendet wird?

    Code:
    free -h
                  total        used        free      shared  buff/cache   available
    Mem:           11Gi       4,9Gi       481Mi       181Mi       6,2Gi       6,4Gi
    Swap:           9Gi        83Mi       9,9Gi
    Hinsichtlich des RAM-Verbrauchs sieht das aber alles eigentlich nicht wild aus:
    SH-NG2.png

    Vorallem korrelliert der Sprung in den Workern und Threads nicht mit der Ram-Nutzung.

    Gruß,
    Hendrik
    Angehängte Dateien

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Zitat von henfri Beitrag anzeigen
    Schreibt das die Änderungen der DB auf die Platte?
    Ja, das sorgt dafür, dass Änderungen in die Datenbank geschrieben werden. Das database Plugin (wie auch schon vorher das sqlite Plugin) cacht ersmal eine Reihe von Änderungen, um sie dann "en-block" zu schreiben. Das dient der Lebensverlängerung von SD Karten.

    Das bedeutet auch, dass die remove_older Tätigkeiten extem schnell fertig sind (sie arbeiten erstmal nur im RAM), weshalb Du davon auch nichts siehst. Das dumpen hingegen benötigt entsprechend Zeit in der Datenbank und ist daher eher ein Langläufer.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    verstehe.
    Mir ist eingefallen, dass ich database_maxage bei vielen Items gesetzt haben.
    Dann habe ich mal auf die Plugin-Scheduler geguckt:
    database.Buffer dump 2022-04-24 10:02:28+0200 5 None {60: 60} -
    database.Remove old 2022-04-24 10:03:30+0200 6 None {91: 91}
    Database dump... Schreibt das die Änderungen der DB auf die Platte? Dann wäre das ja normal, denke ich.
    Remove old: Das hinzufügen von maxage ist eine Woche her. Danach hatte er natürlich erstmal viel zu tun. Aber innerhalb einer Woche sollte das doch erledigt sein, oder? Interessant: in meinen Logs (ein Logger ist auch Loglevel debug) finde ich kein remove_older.

    Gruß,
    Hendrik

    Code:
     shng_details_file:
    # This handler writes all entries to the details-file. Log entries with level WARNING
    # and above are additionally written to the warnings-file (through the root logger).
    #
    # The TimedRotatingFileHandler seperates the logentries by day and
    # keeps the entries of the last seven days in seperate files.
    #
    class: logging.handlers.TimedRotatingFileHandler
    formatter: shng_simple
    level: DEBUG
    utc: false
    when: midnight
    backupCount: 7
    filename: ./var/log/smarthome-details.log
    encoding: utf8
    filters: [knx_filter]
    Zuletzt geändert von henfri; 24.04.2022, 09:12.

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Du musst Dir anschauen, was Du als letztes geändert hast, bevor die Anzahl der Worker so anstieg, dass SmartHomNG zum Schutz Neustarts auslöst.

    Dabei musst Du nach Scheduler Tasks Ausschau halten, die gleichzeitig in größerer Zahl getriggert werden. Das können auch Tasks sein, die extrem schnell abgearbeitet werden. Durch das gleichzeitige triggern wird dem Scheduler dann immer signalisiert, dass er mehr Worker braucht, weil einen Moment lang die Queue entsprechend voll/lang ist. Auf dieses Signal hin wird ein zusätzlicher Worker eingerichtet (maximal einer pro Minute, damit eine kurzfristige Last nicht zum steigern der Worker führt).

    Einen Kommentar schreiben:


  • henfri
    antwortet

    Hallo,

    ja, dein Addon habe ich gesehen. Aber ich nutze sqlite.
    Ich habe jetzt die ganzen evals aus dem Struct rauskommentiert, habe das Problem aber weiterhin (mehr als 10 Neustarts pro Tag :-( ).
    Wie kann ich denn herausfinden, was die ganzen Worker sind?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:

Lädt...
X