Calendar Modul: lange Ladezeit und 98% CPU

Begonnen von slupus, 20 August 2016, 12:47:13

Vorheriges Thema - Nächstes Thema

slupus

Hallo zusammen,

ich habe einen sehr großen Google Kalender über das Calendar Modul eingebunden. Das Update dauert knapp 10 Minuten in denen auf meinem Raspi 98% CPU durch FHEM verwendet werden. Dadurch ist FHEM nicht nutzbar. Nach dem Update läuft alles wieder normal.

Den Kalender habe ich nun so definiert, dass ein Update nur all 25 Stunden durchgeführt wird. Mit einem at starte ich das Update nachts manuell, wenn ich FHEM ansich nicht brauche.

Gibt es eine Möglichkeit, dass der Kalender auch bei einem Neustart von FHEM nicht aktualisiert wird? Denn hier muss ich momentan 10 Minuten warten, bis ich FHEM nutzen kann.

Danke und Grüße
Sören

binford6000

Hi Sören,
selbes Problem bei mir. Zwar nur 5 Minuten aber es ist trotzdem nervend  :(
Ich habe hier im Forum auch schon gesucht aber leider nix gefunden...
Hast Du mittlerweile eine Lösung?
VG Sebastian

chris1284

verkleiner halt den kalendar. ist es wirklich calendar oder hast du evtl noch andere sachen die damit dran hängen? calview zb ob myutils funktionen. wie groß ist denn der calendar?

slupus

#3
@binford6000: Bisher habe ich noch keine Lösung

Mein Kalender enthält 5-10 Termine pro Tag. Aktuell behelfe ich mir wie gesagt mit einem manuellen Update nachts. calview oder andere Dinge hängen nicht dran. lediglich 1x täglich prüfe ich mit einer Funktion die Kalender Einträge. Diese hat jedoch keine Auswirkungs auf die Performance.
Störend ist die lange Ladezeit nur nach einem Neustart.

Deshalb die Frage, ob man über einen Attribute das Update nach dem FHEM Start unterbinden kann.

sTaN

Hallo Zusammen,

ich schließe mich hier mal an. Mein Google Kalender braucht auf meinem Rpi2 ca. 15 Minuten. Kann man dem irgendwie entgegenwirken?
Ich dachte durch die Optionen hideOlderThan 1 und hideLaterThan 5 zieht er immer nur 6 Tage?! Aus welchen Gründen braucht er so lange bzw. nimmt 96% CPU Last ein, sodass man währenddessen nichts mehr verwenden kann?

Gruß
sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Amenophis86

Ich dachte Calender wurde auf nonblocking umgebaut, ist das nicht so?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

chris1284

kann ich nicht sagen, aus dem bauch raus würde ich sagen nein

Amenophis86

mmmh komisch, hier hieß es mal, dass es als nonblocking kommen soll. Aber bei mir blockiert es trotzdem. Werde Dr. Boris Neubert mal anschreiben.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

chris1284

sowie ich das sehe holt er nu die daten aus dem netz nonblocking via HttpUtils_NonblockingGet. der rest kann der verabrietung kann dann durchaus auch noch blockieren

Dr. Boris Neubert

Hallo,

wie Chris schrieb: nichtblockierend ist der Abruf des Kalenders aus dem Netz. Der Rest der Verarbeitung blockiert. Das ist bekannt. Den Wunsch, das zu ändern, hatte ich letztes Jahr aufgenommen, und abschlägig beschieden. Warum?

Ich habe mir den Code nochmal angesehen. Gemäß den Kommentaren laufen Teile der Verarbeitung mit O(n^2) mit n=Anzahl Events im Kalender. Ich erinnere mich, die Passagen optimiert zu haben und ich meine, dass das Problem insbesondere Serientermine sind.

Die Schwierigkeiten bestehen darin, einen Codeteil nichtblockierend im Hintergrund auszuführen, der interne Daten an einem Device ändert, und dabei Probleme durch die Nebenläufigkeit auszuschließen. Die Prozedur, um die es geht, ist Calendar_UpdateCalendar(), die den in FHEM gespeicherten Kalender ausgehend von aus dem Netz geholten Kalender aktualisiert.

Ich denke, dass es zunächst wert ist, den Code weiter zu optimieren. Möchtest Du dabei mithelfen?

Viele Grüße
Boris

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Amenophis86

Ich helfe sehr gerne dabei. Finde das Modul nämlich super und mein HMLAN ist auch dankbar, wenn es nicht mehr blockiert wird :)

Die Attr hideOlder helfen dabei wohl nicht, oder? Denn scheinbar werden die Daten wohl trotzdem geholt nur dann nicht angezeigt.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Hallo,

kannst Du mal eine FHEM-Installation bauen, die nur den Kalender enthält. Und dann profilieren wie hier beschrieben? Während des Profilings bitte einmal ein Kalenderupdate anstoßen. Dann shutdown von FHEM und dann hier die nytprof-Dateien gezippt einstellen.

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Amenophis86

#12
Zitat von: Dr. Boris Neubert am 14 April 2017, 12:03:58
kannst Du mal eine FHEM-Installation bauen, die nur den Kalender enthält.
Ja

Zitat
Und dann profilieren wie hier beschrieben?
Man möge mein Unwissenheit entschuldigen, aber was genau meinst du mit profilieren? global verbose 5?

Zitat
Während des Profilings bitte einmal ein Kalenderupdate anstoßen. Dann shutdown von FHEM
Sobald ich Profilings verstanden habe kann ich das update anstoßen und danach FHEM runterfahren.

Zitat
und dann hier die nytprof-Dateien gezippt einstellen.

nytprof-Dateien? Kenne ich leider wieder nicht.


Werde jetzt mal eine neu FHEM Instanz aufbauen und es darauf soweit einrichten. Das kann ich und dann schauen wir weiter. Vielleicht macht suelle ja auch mit, da es bei ihm wohl wesentlich länger blockiert, als bei mir.

Edit:
Habe auf meinem zweiten Raspberry (Raspberry 1. Gen) jetzt mal ein frisches FHEM aufgesetzt und nur eine Kalender hinzugefügt. Dieser blockiert FHEM schon ca. 10 Sekunden, wenn er ein update des Kalender durchführt. Für alles weitere warte ich auf Erklärungen, was genau ich machen muss.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Dr. Boris Neubert

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Amenophis86

ok, danke für den Link. Aber

1.) der cpan Link im Wiki geht nicht mehr. Habe es jetzt mittels sudo apt-get install libdevel-nytprof-perl
installiert und scheint zu gehen.

2.) Nun habe ich aber folgenden Fehler, wenn ich es starten will:
sudo perl -d:NYTProf /opt/fhem/fhem.pl /opt/fhem/conf/fhem.conf
Can't open /opt/fhem/conf/fhem.conf: No such file or directory


Leider weiß ich nicht was fhem.conf sein soll. Wird das automatisch angelegt und ich muss nur den Ordner vorher anlegen, oder woran scheitert es?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...