Witam.
W jednym z nakręconych tutorialii @artur wspomina, że w ramach procesu i wywołanego w nim zdarzenia które generuje msg, ono “ginie” po przejściu całej ścieżki procesu.
Podczas testów z Node-RED doszedłem do odmiennego wniosku lecz nie mam pewności czy prawidłowego, dlatego proszę skorygujcie jeśli macie wiedzę w tym temacie.
Wyjaśnię na przykładzie procesu rejestratora systemu centralnego ogrzewania:
Proces uruchamiany jest okresowo co 15 sekund i co 3 minuty.
Proces 15s ma obsługiwać docelowo obsługę kotła i całej związywanej z nim infrastruktury, a proces uruchamiany co 3 minuty rejestrować parametry pracy systemu.
SUB Proces “LM Dane” pobiera dane z Lan Kontroler’a w postaci pliku XML i przetwarza go na format JSON używany w nodach i przekazywany dalej w wiadomości (msg).
Ostatecznie jest tworzona i przetwarzana dość pokaźna struktura danych dla każdego z generowanych msg. Rejestracja pojedynczych parametrów odbywa się poprzez eksport do Home Asystanta i zapisywana w historii jego wewnętrznymi mechanizmami w sztucznie utworzonych do tego celu “Pomocnikach”.
Po 6 godzinach pracy skryptu zauważyłem iż zwiększyło się znacznie zużycie pamięci z 52% do 62% w RP 3B+, co mnie zaniepokoiło.
Z szczątkowych informacji które pamiętam z programowania w Java Scripcie pamiętam że jeśli nie usuniemy jakiejś zmiennej, to jest ona stale przechowywana w pamięci, a kolejna zajmuje kolejną przestrzeń i tym tokiem rozumowania doszedłem do wniosku że tak jest i w tym przypadku. Jeśli nie usuniemy zmiennej msg. przed zakończeniem procesu to będzie wisieć w pamięci do restartu HA. No i potwierdzenie moich przemyśleń dokonałem resetu HA. Po restarcie okazało się że faktycznie tak jest, bo zużycie pamięci spadło do poziomu z przed uruchomienia skryptu, czyli 52%.
Dodałem na zakończeniu każdej ścieżki proces usuwający dane z każdego msg. i od 16 godzinach pracy procesu, poziom zapisu danych w pamięci utrzymuje się na 52%-56%, a po restarcie HA zchodzi do 50%
pisząc ten post zauważyłem że nie zamknąłem jeszcze jednej ścieżki, może ona powoduje ten mniejszy, ale istotny wzrost zużycia pamięci - sprawdzimy rano.
Proces obecnie wygląda tak:
zostawiam go na noc w spokoju, rano podeśle kolejne screenshoty dla porównania.