Quale limite di memoria dovresti impostare per Home Assistant?

Eva Wong è la Technical Writer e smanettatrice residente di ZimaSpace. Una geek da sempre con una passione per homelab e software open-source, si specializza nel tradurre concetti tecnici complessi in guide accessibili e pratiche. Eva crede che l'auto-ospitare debba essere divertente, non intimidatorio. Attraverso i suoi tutorial, dà potere alla comunità di demistificare le configurazioni hardware, dalla costruzione del loro primo NAS al dominio dei container Docker.

Non esiste un limite di memoria unico e corretto per Home Assistant. Imposta il limite in base al picco massimo misurato, lascia RAM utilizzabile per l'host e gli altri container e considera ogni arresto per OOM come un segnale che il limite o il carico di lavoro richiedono un'indagine.

Su un home server condiviso, una lettura a riposo non è sufficiente: le attività del Recorder, i backup, il ricaricamento delle integrazioni, i dashboard e una sequenza intensa di automazioni per tutta la casa possono produrre picchi diversi. La procedura più sicura consiste nel registrare una baseline, scegliere un limite reversibile superiore al picco di carico verificato, confermare che l'host disponga ancora di margine e ripetere il test durante il periodo intenso originale prima di rendere permanente l'impostazione.

Inizia dall'utilizzo di picco, non da un numero generico di RAM

Misura contemporaneamente il container di Home Assistant e l'host per diversi giorni normali. Includi un riavvio, un backup, una pulizia o ricompattazione del database se ne esegui una, l'attività sui dashboard e il periodo di automazioni più intenso che puoi riprodurre in sicurezza. Registra il picco del container, la memoria disponibile sull'host, l'attività di swap e l'eventuale variazione dei tempi di risposta.

Un limite di memoria è una soglia cgroup, non un obiettivo prestazionale. Quando un container supera una soglia rigida, il kernel può terminare un processo; un codice di uscita 137 insieme allo stato OOM-killed è il segnale utile. Per questo, l'utilizzo massimo osservato conta più di una media o di una raccomandazione copiata.

Se la memoria aumenta durante un'attività e poi si stabilizza, dimensiona il limite in base a quel picco ripetibile, lasciando un margine operativo. Se la memoria anonima cresce per ore senza diminuire al termine del carico, interrompi il dimensionamento e indaga su un'integrazione che perde memoria, un componente personalizzato o una regressione di versione. Un tetto più alto potrebbe solo ritardare il crash senza correggerlo.

Riserva memoria per l'host e per ogni servizio co-ospitato

Elenca i servizi che devono restare reattivi quando Home Assistant è al massimo del carico: il sistema operativo, Docker, un database, MQTT, DNS, i dashboard, i servizi multimediali e i processi di backup. Il limite deve proteggere questi servizi oltre a Home Assistant; assegnare a un singolo container quasi tutta la RAM installata sposta semplicemente il problema sull'host.

Confronta il picco di Home Assistant con la memoria disponibile sull'host durante la stessa finestra temporale. La cache liberabile non equivale alla memoria applicativa e l'attività di swap può far sembrare il sistema operativo mentre il controllo dei dispositivi diventa lento. Se l'host perde margine prima che Home Assistant raggiunga il suo picco, riduci i processi sovrapposti o sposta un servizio prima di abbassare il limite di Home Assistant.

Questa è una decisione di capacità, non solo un'impostazione di Docker. La guida ZimaSpace correlata sulla misurazione di Home Assistant oltre la cache riscaldata spiega perché un carico di lavoro ripetibile, a freddo e intenso, fornisce una baseline più affidabile di una comoda istantanea a riposo.

Applica un limite reversibile e verifica che venga applicato

Aggiungi l'impostazione della memoria nella configurazione che ricrea effettivamente il container, ad esempio nel file Compose o nell'interfaccia di orchestrazione. Evita di affidarti a una modifica temporanea eseguita sul container attivo se la distribuzione successiva la eliminerà. Salva la configurazione precedente per poterla ripristinare immediatamente.

Dopo la ricreazione, ispeziona il container in esecuzione e conferma che il limite configurato sia visibile. Poi monitora l'utilizzo del container, la memoria disponibile sull'host, lo swap, il numero di riavvii e la latenza. Un'impostazione visualizzata ma non applicata dal cgroup dell'host dà una falsa sensazione di sicurezza, soprattutto nella virtualizzazione annidata.

Se il container si riavvia, non aumentare automaticamente il limite. Verifica se il runtime segnala OOMKilled e il codice di uscita 137. In caso contrario, indaga su un altro percorso di arresto. In caso affermativo, confronta l'orario con il carico di lavoro: un picco breve e ripetibile suggerisce un margine operativo insufficiente, mentre una crescita costante suggerisce una perdita di memoria o un'integrazione fuori controllo.

Ripeti il test con il carico di lavoro intenso originale di Home Assistant

Ripeti lo scenario esatto utilizzato per la baseline: ricarica le stesse integrazioni, apri gli stessi dashboard, esegui la stessa sequenza di controllo dell'intera casa e includi le stesse attività di backup o del Recorder. Cambiare il carico di lavoro dimostrerebbe soltanto che un sistema più leggero è sufficiente.

Un risultato positivo significa che il container rimane sotto la soglia senza eventi OOM, l'host conserva memoria utilizzabile, lo swap non introduce ritardi nei controlli e le automazioni terminano alla velocità normale. Riavvia due volte e ricontrolla dopo il successivo processo in background programmato, così da verificare che il risultato resista alla ricreazione e alle attività basate sul tempo.

Ripristina il nuovo limite se il controllo dei dispositivi diventa inaffidabile, il container entra in un ciclo di riavvii o la pressione sull'host rimane grave. Passa all'isolamento delle integrazioni o al confronto tra versioni quando la memoria continua a crescere dopo la fine del carico che l'ha attivata; a quel punto, la regolazione del limite non è più la soluzione principale.

Domande frequenti

Home Assistant dovrebbe avere sempre un limite rigido di memoria? Su un host Docker condiviso, una soglia testata può proteggere gli altri servizi. Una macchina o una VM dedicata a HAOS viene dimensionata diversamente, quindi non copiare un limite per container in un'allocazione per VM senza misurare l'intero guest.

Un utilizzo elevato della memoria indica automaticamente una perdita? No. La cache e i brevi picchi di carico possono essere normali. Cerca memoria anonima che continua a crescere, eventi OOM, cicli di riavvio o una latenza crescente dopo la fine del carico.

È consigliabile disabilitare lo swap? Non come prima soluzione. Prima verifica se lo swap sta nascondendo la pressione sull'host o impedendo un arresto improvviso, poi modificalo solo con una procedura di ripristino testata e una quantità di RAM fisica sufficiente per l'intero carico di lavoro.

Supporto e consigli

Altro da leggere

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.