Nie ma jednej prawidłowej wartości limitu pamięci dla Home Assistant. Ustal limit na podstawie zmierzonego maksymalnego zużycia, pozostaw użyteczną ilość pamięci dla hosta i innych kontenerów, a każde zabicie procesu z powodu braku pamięci traktuj jako sygnał, że limit lub obciążenie wymaga analizy.
Na współdzielonym serwerze domowym odczyt w stanie bezczynności nie wystarczy: działanie usługi Recorder, kopie zapasowe, ponowne ładowanie integracji, pulpity oraz intensywna sekwencja automatyzacji w całym domu mogą generować różne wartości szczytowe. Najbezpieczniej jest zarejestrować stan bazowy, ustawić odwracalny limit powyżej zweryfikowanego maksymalnego obciążenia, potwierdzić, że host nadal ma zapas pamięci, a następnie ponownie przetestować pierwotny okres największego obciążenia przed trwałym zapisaniem ustawienia.
Zacznij od maksymalnego zużycia, a nie od ogólnej wartości pamięci RAM
Mierz zużycie pamięci przez kontener Home Assistant i hosta jednocześnie przez kilka zwykłych dni. Uwzględnij ponowne uruchomienie, kopię zapasową, czyszczenie lub przebudowę bazy danych, jeśli z którejś z tych funkcji korzystasz, aktywność na pulpitach oraz najintensywniejszy okres działania automatyzacji, który możesz bezpiecznie odtworzyć. Zapisuj maksymalne zużycie kontenera, dostępną pamięć hosta, aktywność pamięci wymiany oraz ewentualne zmiany czasu reakcji.
Limit pamięci to granica cgroup, a nie docelowy poziom wydajności. Gdy kontener przekroczy twardą granicę, jądro może zakończyć proces; kod wyjścia 137 wraz ze stanem OOM-killed to charakterystyczny sygnał. Dlatego zaobserwowane maksymalne zużycie ma większe znaczenie niż średnia lub skopiowane zalecenie.
Jeśli zużycie pamięci rośnie podczas zadania, a potem się stabilizuje, ustaw limit na poziomie powtarzalnego maksimum z dodatkowym zapasem roboczym. Jeśli pamięć anonimowa rośnie przez wiele godzin i nie spada po zakończeniu obciążenia, przerwij dobieranie limitu i zbadaj wyciek w integracji, komponencie niestandardowym lub regresję w wersji. Wyższy limit może tylko opóźnić awarię, nie usuwając jej przyczyny.
Zarezerwuj pamięć dla hosta i wszystkich współdzielonych usług
Wypisz usługi, które muszą pozostać responsywne, gdy Home Assistant jest najbardziej obciążony: system operacyjny, Docker, baza danych, MQTT, DNS, pulpity, usługi multimedialne i zadania tworzenia kopii zapasowych. Limit musi chronić te usługi tak samo jak Home Assistant; przydzielenie jednemu kontenerowi niemal całej zainstalowanej pamięci RAM jedynie przenosi awarię na hosta.
Porównaj maksymalne zużycie Home Assistant z dostępną pamięcią hosta w tym samym czasie. Pamięć podręczna, którą można odzyskać, nie jest tym samym co pamięć używana przez aplikacje, a aktywność pamięci wymiany może sprawiać, że system działa, mimo iż sterowanie urządzeniami staje się powolne. Jeśli host traci zapas pamięci, zanim Home Assistant osiągnie swoje maksimum, ogranicz nakładanie się zadań lub przenieś usługę, zanim zmniejszysz limit Home Assistant.
To decyzja dotycząca pojemności, a nie tylko ustawienie Dockera. Powiązany poradnik ZimaSpace dotyczący pomiaru Home Assistant poza rozgrzaną pamięcią podręczną wyjaśnia, dlaczego powtarzalne obciążenie obejmujące stan zimny i intensywną pracę zapewnia bardziej wiarygodny punkt odniesienia niż wygodny odczyt w stanie bezczynności.
Zastosuj odwracalny limit i sprawdź, czy jest egzekwowany
Dodaj ustawienie pamięci w konfiguracji, która faktycznie odtwarza kontener, na przykład w pliku Compose lub interfejsie orkiestracji. Nie polegaj na jednorazowej zmianie w działającym kontenerze, jeśli następne wdrożenie ją usunie. Zachowaj poprzednią konfigurację, aby móc ją natychmiast przywrócić.
Po ponownym utworzeniu kontenera sprawdź działający kontener i potwierdź, że skonfigurowany limit jest widoczny. Następnie monitoruj zużycie kontenera, dostępną pamięć hosta, pamięć wymiany, liczbę ponownych uruchomień i opóźnienia. Ustawienie wyświetlane, lecz nieegzekwowane przez cgroup hosta daje fałszywe poczucie bezpieczeństwa, szczególnie w zagnieżdżonej wirtualizacji.
Jeśli kontener uruchomi się ponownie, nie zwiększaj automatycznie limitu. Sprawdź, czy środowisko wykonawcze zgłasza OOMKilled i kod wyjścia 137. Jeśli nie, zbadaj inną przyczynę zatrzymania. Jeśli tak, porównaj znacznik czasu z obciążeniem: powtarzalny krótki skok sugeruje zbyt mały zapas roboczy, natomiast stały wzrost wskazuje na wyciek lub niekontrolowane działanie integracji.
Przetestuj ponownie podczas pierwotnego intensywnego obciążenia Home Assistant
Powtórz dokładnie scenariusz użyty do ustalenia stanu bazowego: załaduj ponownie te same integracje, otwórz te same pulpity, uruchom tę samą sekwencję sterowania całym domem i uwzględnij tę samą kopię zapasową lub aktywność usługi Recorder. Zmiana obciążenia dowiodłaby jedynie, że lżejszy system mieści się w limicie.
Wynik pozytywny oznacza, że kontener pozostaje poniżej granicy bez zdarzeń OOM, host zachowuje użyteczną ilość pamięci, pamięć wymiany nie powoduje opóźnień sterowania, a automatyzacje kończą się w zwykłym czasie. Uruchom system ponownie dwukrotnie i sprawdź go ponownie po najbliższym zaplanowanym zadaniu w tle, aby upewnić się, że wynik jest zachowany po odtworzeniu kontenera i podczas zadań zależnych od czasu.
Wycofaj nowy limit, jeśli sterowanie urządzeniami stanie się zawodne, kontener wpadnie w pętlę ponownych uruchomień lub presja na hosta pozostanie poważna. Jeśli pamięć nadal rośnie po zakończeniu obciążenia wywołującego problem, przejdź do izolowania integracji lub porównania wersji; w takim przypadku dostrajanie limitu nie jest już głównym sposobem naprawy.
Najczęściej zadawane pytania
Czy Home Assistant zawsze powinien mieć twardy limit pamięci? Na współdzielonym hoście Dockera przetestowana granica może chronić inne usługi. Dedykowany komputer HAOS lub maszyna wirtualna jest konfigurowana inaczej, dlatego nie przenoś limitu kontenera bez pomiarów do przydziału pamięci maszyny wirtualnej bez zmierzenia pełnego obciążenia systemu gościa.
Czy duże zużycie pamięci automatycznie oznacza wyciek? Nie. Pamięć podręczna i krótkotrwałe skoki obciążenia mogą być normalne. Szukaj pamięci anonimowej, która stale rośnie, zdarzeń OOM, pętli ponownych uruchomień lub pogarszających się opóźnień po zakończeniu obciążenia.
Czy należy wyłączyć pamięć wymiany? Nie jako pierwszy krok. Najpierw sprawdź, czy pamięć wymiany ukrywa presję na hoście lub zapobiega nagłej awarii, a następnie zmieniaj to ustawienie wyłącznie z przetestowaną możliwością wycofania zmiany i wystarczającą ilością fizycznej pamięci RAM dla pełnego obciążenia.
Wsparcie i wskazówki
Więcej do przeczytania

Jak zoptymalizować połączenia z bazą danych Home Assistant dla kontenerów działających jednocześnie
Dostosuj zewnętrzną bazę danych Recordera na podstawie zmierzonej liczby aktywnych połączeń i opóźnień, zamiast zwiększać maksymalną liczbę połączeń lub kopiować pulę z innego hosta.

Jak zapobiegać duplikowaniu zadań lub importów w Home Assistant
Używaj śladów i unikalnych kluczy operacji, aby można było bezpiecznie ponawiać automatyzacje i importy bez tworzenia zduplikowanych działań ani rekordów.

Jak naprawić Home Assistant po zapełnieniu woluminu bazy danych
Odzyskaj działanie po całkowitym zapełnieniu woluminu Recordera bez wcześniejszego usuwania dowodów, a następnie ogranicz przyrost danych i potwierdź, że historia oraz automatyzacje przetrwają ponowne...

