76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

Begonnen von DS_Starter, 11 Februar 2024, 14:11:00

Vorheriges Thema - Nächstes Thema

DS_Starter

Hallo zusammen,

in meinem contrib liegt ein Update der v2.10.6.

Manche/viele? kennen das Problem: Perl gibt intern nicht mehr benötigten Speicher (Hashes, Arrays, temporäre Strings) oft nicht direkt an das Betriebssystem zurück. Der Arbeitsspeicher des FHEM-Prozesses wächst dadurch im Laufe der Zeit kontinuierlich an (bei manchen sehr deutlich), obwohl die Daten längst verarbeitet sind. Von echten Speicherleaks mal abgesehen.

Ich habe eine regelmäßige Speicherbereinigung direkt in den Datenfluß integriert. Sobald ein Verarbeitungsdurchlauf abgeschlossen ist, fordert eine Funktion den Linux-Kernel explizit dazu auf, den ungenutzten Heap-Speicher wieder an das System freizugeben.

In meinen Tests zeigt sich eine deutliche und nachhaltige Reduktion des RAM-Footprints:

- deutlicher RAM-Rückgang: Die RAM-Belegung des Prozesses sinkt wieder auf das reale Minimum ab (siehe angehängter Plot).
  Der RAM fand ein Plateau und fiel nach Einsatz des Code sukszessive.
- stabilisierter RAM: Der Speicheranteil des FHEM Hauptprozesses reduziert sich bei mir um ca. 200 MB.
- minimaler Overhead: Die Ausführungszeit der Bereinigung liegt im Bereich von Bruchteilen einer Millisekunde und hat somit keinen spürbaren Einfluss auf die Performance.

Der Code läuft im Modul, hat aber Auswirkung auf das gesamte FHEM System.
Es ist eigentlich eine zentrale Funktionalität, die ich vielleicht in einem separaten kleinen Helper-Modul bereitstelle. Es kann allen geplagten Usern helfen ihre System zu stabilisieren. Klappt aber nur unter Linux.


Vorraussetzung:

Ihr müsst das Perl Modul FFI::Platypus in eurem System installieren. Das geht einfach mit dem FHEM Installer oder auf OS mit "apt install libffi-platypus-perl".
Danach rebooten. Wenn ihr das Modul nicht installiert passiert nichts, jedoch wird keine Speicherrückgabe durchgeführt.

Probiert es gerne mal aus.


LG,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron+Pylontech
Maintainer:SSCam,SSChatBot,SSCal,SSFile,DbLog,DbRep,Log2Syslog,SolarForecast,Watches,Dashboard,PylonLowVoltage,MemSaver
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

[Offtopic]
Hallo zusammen,

ich habe ein kleines Modul 98_MemSaver erstellt, welches die Speicherrückgabe an das OS (Linux) organisiert und darüber hinaus ein schlankes Set an RAM/CPU-Readings bereitstellt. Die wichtigsten Kennzahlen sollten so ohne weitere Module verfügbar sein.

Das Modul liegt in meinem contrib und wird ganz einfach definiert. Hier mein Beispiel:

defmod Saver MemSaver 300
attr Saver alias Speicherfreigabe
attr Saver devStateIcon disabled:10px-kreis-gelb active:10px-kreis-gruen
attr Saver disable 0
attr Saver icon it_memory
attr Saver room Dienste->Allgemein
attr Saver verbose 3

Online Hilfe ist auch verfügbar und sagt eigentlich alles aus.
Vorher muß das Modul FFI::Platypus installiert werden.

Bei mir hat der RAM inzwischen ein unteres Plateau erreicht und steht absolut stabil.
Mit diesem kleinen Modul sollten auch User, die das SF-Modul nicht nutzen, ihr System bezüglich des RAM-Verbrauchs optimieren können. Schwere Speicherleaks durch Programmfehler kann das Helferlein nicht beseitigen, aber in vielen Fällen sollte es hilfreich sein und ich würde mich freuen wenn es den Usern hilft.

Über Rückmeldungen freue ich mich natürlich.  :)

LG,
Heiko
[/Offtopic]
Proxmox+Debian+MariaDB, PV: SMA, Victron+Pylontech
Maintainer:SSCam,SSChatBot,SSCal,SSFile,DbLog,DbRep,Log2Syslog,SolarForecast,Watches,Dashboard,PylonLowVoltage,MemSaver
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter