"Rozbieganie" zużycia CPU wraz z upływem czasu

Od dłuższego czasu mam problem ze wzrastającym zużyciem CPU wraz z czasem od ostatniego restartu.

Mój aktualny sprzęt to Terminal Dell Wyse Dx0D 4GB + 128GB SSD
Instalacja HAOS:
obraz

Wygląda to w ten sposób:

Nie potrafię tego skorelować z konkretnymi wydarzeniami, nie wiem co może być przyczyną ani jak temu zaradzić…
Czy ktoś mógłby mi pomóc, spróbować usunąć przyczynę?

A jak wygląda zajęcie pamięci i swapa w tym samym czasie?

Niestety, nie mam (nie miałem, bo już dodałem do konfiguracji) sensora swap_use, a jeśli chodzi o zajęcie pamięci to nie widać korelacji:

Zużycie procesora powiększa się wraz z upływem czasu (widać to na wykresie), ale zauważyłem, że w kumulacji piki pojawiają się dokładnie co 5 minut (może jakaś automatyzacja, muszę to jeszcze sprawdzić, wyłączę następnym razem NR).

Przy okazji, przed chwilą HA zaliczył totalną zawieszkę (widać na wykresie 100% zużycia CPU) - brak dostępu do dashboardu, nie działały automatyzacje Node-Red, nie działał DNS (AdGuard), ping do HA latał… Tutaj lekko użycie pamięci podskoczyło.
Podłączyłem monitor zewnętrzny do Della aby ewentualnie coś sprawdzić na HA CLI - brak obrazu - ale być może wyświetlanie obrazu wyłącza się po pewnym czasie w przypadku braku monitora? (nie wiem, normalnie nie mam podpiętego zew. monitora).
Pomogło fizyczne zresetowanie Della…
Sytuacja pojawiła się 2 raz w ciągu miesiąca. Teraz byłem w domu, mogłem szybko zresetować, ale ostatnio byłem na wyjeździe i miałem duży problem (dostępu w 95% nie było, pojawiał się na chwilę, widziałem zużycie 100% i zrywało połączenie…).

Dodałem ten sensor do swapa i będę szukał powiązania ze wzrostem CPU… Czy masz może jeszcze jakiś pomysł na tą chwilę?

To zależy ile fizycznie masz RAMu i jaki to rodzaj instalacji (jesli to jest ponad 3GB z 4GB to nie jest to za wesoło, tam gdzie zaznaczyłeś czerwoną ramkę prawdopodobnie wydarzyło się coś grubszego w rodzaju zabijania procesów przez supervisora, dlatego jak przypuszczam zajętość pamięci radykalnie spadła.

To raczej dobry trop.

Stawiam na brak inicjalizacji karty, jeśli zrestartujesz hosta z podłączonym monitorem , to obraz powinien się pojawić.

Wprawdzie to raczej bez związku (ale bywa różnie), ja bym zaczął monitorować stan dysku, możesz użyć takich Dodatków

lub
Scrutiny

ewentualnie Scrutiny FA z powyższego repozytorium (jeśli zwykła wersja nie będzie chciała działąc w twojej konfiguracji).

Zaczynam rzeczywiście podejrzewać problem z RAM lub Swap. Zużycie przy normalnej pracy wygląda na bardzo wysokie, to zrzut z obecnej chwili, nie dzieje się nic szczególnego:

Swap praktycznie full, RAM 85%…
Chwilę zastanawiałem się nad wymianą (dodaniem) RAM-u, ale dla mojego Della 4GB to chyba max…
Poczytam jeszcze o zwiększeniu Swap (czy to w ogóle możliwe).

Co do sprawdzania dysku, zainstalowałem Scrutiny, ale mam pusty Dashboard (nie pokazuje żadnego dysku) - albo musi się odświeżyć (dałem hourly updates) albo muszę zainstalować FA (jeszcze to sprawdzę).

Dashboard nie powinien być pusty- to świadczy o niewykrytym sprzęcie.
Wiec albo Scrutiny FA (oczywiście z nadanymi uprawnieniami) albo wersja 2ab714f5-ls35-2 (bo aktualna czasem nie działa poprawnie na starym sprzęcie, również może być konieczna w wersji FA, tzn. ta z końcówką “-2” to już jest FA, ale gdyby działała, to do rozważenia jest wersja bez FA, miałem zgłosić issue, ale nie miałem czasu i zapomniałem…).

Sugeruję w takim wypadku spróbować HDDtools (oba te narzędzia bazują na nieco innych projektach, więc jakaś szansa jest, choć akurat HDDtools wymaga konfiguracji pasującej do sprzętu, to nie zdarzyło mi się aby nie działał na w miarę normalnych konfiguracjach).

Żadne z tych narzędzi nie obsługuje eMMC (to tak poza konkurencją, bo spodziewam się, że masz sata, więc problemu nie będzie).


A wracając do tematu

Czyli źródłowym problemem jest raczej brak pamięci, zacznij od NR.

Jeśli to instalacja HAOS to swapa nie powiększysz, ale mając stały wyciek pamięci to i tak by nie pomogło, bo w momencie wystąpienia wycieku pamięci w marę upływy czasu zostanie zajęta każda ilość pamięci.

Zainstalowałem Scrutiny FA, wygląda na to, że dysk jest w porządku:

Wykonałem wg tego linku (1 post). Udało się powiększyć:

Swoją drogą w ogóle nie rozumiem tej komendy… Myślałem, że będzie w sumie 2Gb, okazuje się, że mam 3Gb…

Zamknąłem NR, zużycie pamięci spadło o 48% (z 88% na 40%)…

obraz

Co mogę zrobić, aby naprawić NR? (musi działać…)

1 Like

I to się liczy, znalazłeś rozwiązanie którego nie znałem - otagowałem wątek.
Niestety w przypadku wycieku pamięci to nie pomoże, da tylko tyle, że system będzie się wywracał po odpowiednio dłuższym czasie.

HAOS przy zajęciu fizycznej pamięci ponad 80% zaczyna spychać nadmiar do swapa, ale są granice brawury - w pewnym momencie nastąpi sytuacja w której w setki czy tysiące razy wolniejszym swapie znajdzie się coś co jest potrzebne na bieżąco i wtedy masz freez.

Znaleźć wadliwy kod, który w nim uruchamiasz…
(bo to nie tyle NR jest problemem co wycieki pamięci w tym kodzie który tam uruchomiłeś).

Jeżeli NR jest problemem, a tak wynika, to ja bym na początek wyeksportował wszystkie flow do osobnych plików, wyczyścił wszystko w NR i po kolei dodawał po jednym, by znaleźć ten, który powoduje problem. A potem w nim szukać przyczyny. Bo mając wszystkie włączone, to tak ciężko będzie zdiagnozować, który jest problemem.

1 Like

Mam problem z tym NR, od wczoraj próbuję z nim walczyć ale nie doszedłem do niczego sensownego…

Mam w sumie 35 flow, 3 sub-flow (w kilku używam zmiennych contextowych), nic na poziomie Global. W sumie nic specjalnego, raczej proste flow, bez pętli…

Jak wyłączę NR zużycie pamięci w HA spada do 40%.

Wyłączone wszystkie flow (działają tylko sub-flow - ale ich się chyba nie da wyłączyć, w sumie to i tak nie działają bez flow) - zużycie pamięci przez NR: 9% (w sumie 49%)

Włączając po jednym flow zużycie pamięci podnosi się o 0,5 do 2% (w zależności od flow).
Nie zauważyłem wycieków (włączyłem 15 flow - zużycie 23%, zostawiłem na noc, rano nadal 23%).

Oczywiście, wiem, że to za krótki czas, aby móc to sensownie sprawdzić, ale z drugiej strony włączyłem wszystkie i wróciłem do tego co było przed testami - zużycie przez NR 47% (w sumie 87%)

obraz

obraz

Czyli wychodzi mi 9% zużycia RAM na 3 sub-flow (3% / sub-flow) oraz 38% zużycia RAM na 35 flow (1,08% / flow).
Przy 3527,6 MiB RAM wychodzi odpowiednio 106 MiB / sub-flow oraz 38 MiB / flow.

Użycie przez dodatek NR (na poziomie 47%) pojawia się od razu po włączeniu dodatku (nic nie zdążyło “wyciec”…).

I teraz nie wiem, czy tak ma być? Prawie 40 MiB na jedno flow? 1658 MiB na cały NR od razu po uruchomieniu?

Dodam, że NR w najnowszej wersji (13.5.3), wszystkie Nody aktualne, zainstalowany Nod Red Companion.

Gdzieś zbiera ci jakieś śmieci w RAM.
Posiadam dużo więcej flow i nie mam tak dużego zużycia.
Screenshot - 18.11.2022 , 10_57_05

node --version v12.22.12
NodeRed Current version: 13.5.3
node-red-contrib-home-assistant-websocket 0.47.0
Używasz jakiś wpisów do Bazy w NR ?
Źle skonfigurowany Screenshot - 18.11.2022 , 11_17_55
Mqtt w NR ?

Używam w jednym flow, wydaje mi się, że skonfigurowany ok. Wyłączyłem flow dla testów.

Używam w kilku flow. Wyłączyłem wszystkie do testów.

Kurcze, nie rozumiem w sumie pytania… Chyba nie. W kilku flow zapisuję csv do katalogu /share.

Po wyłączeniu tych kilku flow zużycie na poziomie 38%:

obraz

Podsyłam nody konfiguracyjne:

obraz

Pytanie pomocnicze: ile u Ciebie to 4,94%, ile masz RAM w sumie?
I pytanie świeżaka, skąd masz taki wykresik zużycia NR (skąd sensor)?

Chyba mnie to czeka… Jak i czy można wyeksportować szybko wszystkie flow do osobnych plików? Wiem, że można wyeksportować All flows do jednego pliku.

Export Current flow eksportuje zaznaczone flow.
Jest też opcja Hide flow ale nie wiem czy ukryte też eksportuje
Screenshot - 18.11.2022 , 12_24_40

8

Sensory są w Urządzenia oraz usługi Supervisor

Screenshot - 18.11.2022 , 12_29_05
Trzeba je sobie włączyć bo normalnie są wyłączone
Screenshot - 18.11.2022 , 12_27_46

Wykres to custom:mini-graph-card z HACS

type: custom:mini-graph-card
name: NR Memory %
icon: mdi:memory
entities:
  - entity: sensor.node_red_memory_percent
    name: NR memory
show:
  extrema: false
  labels: true
  points: false
height: 300
align_state: left
color_thresholds:
  - value: 3
    color: '#BE1CEA'
  - value: 15
    color: '#0066AF'
  - value: 20
    color: '#d35400'
  - value: 22
    color: '#c0392b'
hours_to_show: 72
points_per_hour: 24

Wersje zainstalowanych nodów

artpc@debian:/usr/share/hassio/homeassistant/node-red$ npm list
node-red-project@0.0.1 /usr/share/hassio/homeassistant/node-red
├── @node-red-contrib-themes/solarized-dark-grey@1.0.2
├── @openpixel/node-red-contrib-googleapis@0.2.13
├── do-red@0.3.3
├── google-translate-tts@0.4.0-dev
├── node-red-configurable-ping@1.0.1
├── node-red-contrib-advanced-ping@1.2.0
├── node-red-contrib-afya-counter-the-new@0.0.4
├── node-red-contrib-afya-lullaby@0.0.3
├── node-red-contrib-alarm@1.3.0
├── node-red-contrib-alexa-notifyme@1.0.4
├── node-red-contrib-alexa-remote2-v2@3.10.5
├── node-red-contrib-arp@0.0.2
├── node-red-contrib-astrodata@0.0.4
├── node-red-contrib-boolean-logic-ultimate@1.0.57
├── node-red-contrib-button-events@2.0.0
├── node-red-contrib-chronos@1.18.3
├── node-red-contrib-controltimer@0.3.0
├── node-red-contrib-countdown@1.3.2
├── node-red-contrib-credentials@0.2.2
├── node-red-contrib-dashboard-average-bars@0.0.6
├── node-red-contrib-delay-gate@1.0.1
├── node-red-contrib-eztimer@1.2.7
├── node-red-contrib-flogger@1.2.2
├── node-red-contrib-fs-extra@1.0.1
├── node-red-contrib-fs-ops@1.6.0
├── node-red-contrib-fs@1.4.1
├── node-red-contrib-google-home-notifier-offline@1.1.1
├── node-red-contrib-google-home-notify@0.0.7
├── node-red-contrib-google@0.2.0
├── node-red-contrib-home-assistant-websocket@0.47.0
├── node-red-contrib-input-split@0.1.0
├── node-red-contrib-interval-multiples-timer@1.0.5
├── node-red-contrib-isonline@1.1.15
├── node-red-contrib-join-joaoapps@1.2.3
├── node-red-contrib-light-scheduler@0.0.18
├── node-red-contrib-loop-processing@0.5.1
├── node-red-contrib-looptimer@0.0.8
├── node-red-contrib-match@1.0.2
├── node-red-contrib-media-tags@0.0.6
├── node-red-contrib-mytimeout@3.2.2
├── node-red-contrib-noop@1.1.0
├── node-red-contrib-pid@1.1.7
├── node-red-contrib-play-audio@2.5.0
├── node-red-contrib-power-monitor@1.2.1
├── node-red-contrib-pushover@0.2.0
├── node-red-contrib-queue-gate@1.5.5
├── node-red-contrib-random-item@1.0.3
├── node-red-contrib-s7@3.1.0
├── node-red-contrib-schedex@1.10.6
├── node-red-contrib-simple-gate@0.5.2
├── node-red-contrib-simpletime@2.10.4
├── node-red-contrib-spline-curve@1.1.8
├── node-red-contrib-spotify@0.1.4
├── node-red-contrib-startup-trigger@0.1.0
├── node-red-contrib-stoptimer-varidelay@0.5.2
├── node-red-contrib-stoptimer@0.0.7
├── node-red-contrib-stoptimer3@0.1.2
├── node-red-contrib-string@1.0.0
├── node-red-contrib-sun-position@2.1.1
├── node-red-contrib-tasmota@0.9.12
├── node-red-contrib-telnet-client@1.0.4
├── node-red-contrib-time-based-dimmer@0.8.2
├── node-red-contrib-timeout@1.1.5
├── node-red-contrib-timeprop@1.0.1
├── node-red-contrib-timerswitch@1.4.0
├── node-red-contrib-traffic@0.2.1
├── node-red-contrib-tts-ultimate@1.0.52
├── node-red-contrib-ui-digital-display@1.0.3
├── node-red-contrib-unsafe-function@0.8.0
├── node-red-contrib-weekday@0.1.0
├── node-red-contrib-wemo-emulator@1.0.4
├── node-red-contrib-zigbee2mqtt-devices@0.19.6
├── node-red-contrib-zigbee2mqtt@2.6.3
├── node-red-dashboard@3.2.0
├── node-red-debugger@1.1.1
├── node-red-google-notify@1.4.8
├── node-red-node-darksky@0.1.19
├── node-red-node-mongodb@0.2.5
├── node-red-node-ping@0.3.3
├── node-red-node-pushover@0.1.1
└── thingzi-logic-timers@1.2.5

Dzięki za info odnośnie Sensorów Memory_percent:

obraz

To wiem, chciałem zapytać czy można wyeksportować wszystkie osobno jednym klikiem?

Ile masz RAMu u siebie?

8
Strasznie dużo żre ci NR
Screenshot - 18.11.2022 , 15_46_03

Sprawdź ten przepływ, znaleziony w necie.

[{"id":"da3d35e1314f395a","type":"inject","z":"58aa202c0d7e669e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":270,"y":460,"wires":[["1b4aac38a3d0cd92"]]},{"id":"1b4aac38a3d0cd92","type":"function","z":"58aa202c0d7e669e","name":"","func":"let mem = process.memoryUsage()\n\nconst formatMem = (m) => (m / 1048576).toFixed(2)\n\nmsg.topic = 'Memory Use (MB)'\nmsg.payload = {\n    RSS: formatMem(mem.rss),\n    HeapUsed: formatMem(mem.heapUsed),\n    HeapTotal: formatMem(mem.heapTotal),\n    'External C++': formatMem(mem.external)\n}\n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[{"var":"process","module":"process"}],"x":410,"y":460,"wires":[["24ec3a426815da70"]]},{"id":"24ec3a426815da70","type":"debug","z":"58aa202c0d7e669e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":560,"y":460,"wires":[]}]

Dostaniesz taki wynik

Screenshot - 18.11.2022 , 16_05_32

RSS:

„Rezydentny zestaw” pamięci aktualnie używanej przez proces node.js (w tym przypadku Node-RED).

Heapa: Obszar pamięci w zbiorze rezydentnym, który przechowuje obiekty, ciągi znaków i domknięcia.

Zewnętrzny (C++): pokazuje użycie pamięci przez obiekty C++ powiązane z obiektami JavaScript zarządzanymi przez V8 (podstawowy silnik JavaScript dla node.js).

[quote=“Zordrac, post:14, topic:6972”]
Ile masz RAMu u siebie?
[/quote] 8
Strasznie dużo żre ci NR
Screenshot - 18.11.2022 , 15_46_03

Sprawdź ten przepływ, znaleziony w necie.

[{"id":"da3d35e1314f395a","type":"inject","z":"58aa202c0d7e669e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":270,"y":460,"wires":[["1b4aac38a3d0cd92"]]},{"id":"1b4aac38a3d0cd92","type":"function","z":"58aa202c0d7e669e","name":"","func":"let mem = process.memoryUsage()\n\nconst formatMem = (m) => (m / 1048576).toFixed(2)\n\nmsg.topic = 'Memory Use (MB)'\nmsg.payload = {\n    RSS: formatMem(mem.rss),\n    HeapUsed: formatMem(mem.heapUsed),\n    HeapTotal: formatMem(mem.heapTotal),\n    'External C++': formatMem(mem.external)\n}\n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[{"var":"process","module":"process"}],"x":410,"y":460,"wires":[["24ec3a426815da70"]]},{"id":"24ec3a426815da70","type":"debug","z":"58aa202c0d7e669e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":560,"y":460,"wires":[]}]

Dostaniesz taki wynik

Screenshot - 18.11.2022 , 16_05_32

RSS:

„Rezydentny zestaw” pamięci aktualnie używanej przez proces node.js (w tym przypadku Node-RED).

Heapa: Obszar pamięci w zbiorze rezydentnym, który przechowuje obiekty, ciągi znaków i domknięcia.

Zewnętrzny (C++): pokazuje użycie pamięci przez obiekty C++ powiązane z obiektami JavaScript zarządzanymi przez V8 (podstawowy silnik JavaScript dla node.js).

Sprawdziłbym tez rożnego rodzaju pętle, MQTT, częste zapisy do pliku.
Tam gdzie masz jakieś pętle/mqtt dodaj debug na końcu, może się okazać ze leci masa zapętlonych wiadomości