Guide/Docker usa troppa memoria
Docker usa troppa memoria sul Mac? Come trovare il container e limitarlo
In breve
Sul Mac, Docker esegue tutti i container dentro un’unica macchina virtuale Linux, quindi Monitoraggio Attività mostra un solo grande processo, di solito Virtual Machine Service for Docker, e non i container. Per vedere quale container usa la memoria, esegui docker stats. Per limitare il totale, abbassa Memory limit in Settings → Resources → Advanced di Docker Desktop; il valore predefinito è metà della memoria del Mac. Resource Saver, nello stesso punto, spegne la macchina virtuale quando Docker Desktop è inattivo. Vitals, un monitor di sistema per Mac, mostra memoria, CPU, rete e porte di ogni container nel suo pannello Container, e arresta un container dalla barra dei menu.
Come trovare e limitare la memoria di Docker
- 01 Apri Monitoraggio Attività, fai clic su Memoria e digita Docker nel campo di ricerca. La riga più grande è la macchina virtuale che esegue i tuoi container; con il framework Virtualization di Apple si chiama Virtual Machine Service for Docker. com.docker.backend è Docker Desktop stesso.
- 02 Nel Terminale, esegui
docker stats --no-stream. Ogni riga è un container in esecuzione, e MEM USAGE / LIMIT mostra quanto usa e il massimo che può usare. - 03 Arresta ciò che non stai usando:
docker stopseguito dal nome del container, odocker compose downnella cartella di un progetto Compose. - 04 Apri Settings → Resources → Advanced di Docker Desktop e abbassa Memory limit a poco più di quanto mostra
docker statsnei momenti di massimo utilizzo. Applica la modifica; Docker Desktop riavvia la macchina virtuale. - 05 Attiva Resource Saver nella stessa sezione, così la macchina virtuale si spegne quando non ci sono container in esecuzione.
Anche OrbStack, Colima, Rancher Desktop e Podman eseguono i container in una macchina virtuale, ognuno con la sua impostazione per la memoria. Per Colima, colima start --memory 4 assegna 4 GB alla macchina virtuale.
I container sono una funzione di Linux, quindi sul Mac ogni motore li esegue dentro una piccola macchina virtuale Linux. macOS vede quella macchina come un solo processo e non ha idea di quale container al suo interno stia usando cosa. Per questo Monitoraggio Attività mostra un solo processo con diversi gigabyte e nessun container, e per questo le risposte sono negli strumenti di Docker. La tabella qui sotto collega ciò che vedi a cosa è e a cosa fare.
Dove va la memoria di Docker
| Cosa vedi | Cos’è | Cosa fare |
|---|---|---|
| Virtual Machine Service for Docker, diversi GB | La macchina virtuale Linux che esegue tutti i container | Abbassa Memory limit in Settings → Resources → Advanced |
| com.docker.backend | Il processo di Docker Desktop | Di solito piccolo; riavvia Docker Desktop se continua a crescere |
| La memoria resta alta senza container in esecuzione | La macchina virtuale trattiene ancora la memoria che ha usato | Attiva Resource Saver, o chiudi Docker Desktop |
| Un container vicino al suo limite | Gli serve di più, o perde memoria | docker stats, e un limite per container |
| La memoria sale durante la build delle immagini | Le build girano nella stessa macchina virtuale | Normale; scende quando la build finisce |
Perché Monitoraggio Attività mostra un solo grande processo Docker
La macchina virtuale riceve la memoria da macOS come qualsiasi app, fino al Memory limit che hai impostato. Al suo interno, Linux divide quella memoria tra i tuoi container e usa il resto per la cache dei file, come fa macOS. Da fuori sembra tutto uguale: un solo processo che occupa molta memoria.
Solo il motore conosce la suddivisione, ed è quello che docker stats gli chiede. La colonna CPU % in quel comando è una quota delle CPU della macchina virtuale, e MEM % è una quota del limite del container, o dell’intera macchina virtuale quando il container non ne ha uno.
Quanta memoria dare a Docker
Per impostazione predefinita Docker Desktop prende metà della memoria del Mac: 8 GB su un Mac da 16 GB. Un tipico ambiente di sviluppo, un server applicativo, un database e una cache, di solito ne richiede molta meno. Fai girare il tuo ambiente come al solito, osserva il totale in docker stats nel momento di massimo utilizzo e imposta Memory limit poco sopra.
Se lo imposti troppo basso, Linux dentro la macchina virtuale arresta i container che esauriscono la memoria. Esegui docker inspect --format '{{.State.OOMKilled}}' seguito dal nome di un container: stampa true se è successo. Alza il limite, o dai a quel container un limite suo, così non può trascinare giù anche gli altri.
Impostare un limite di memoria per container
Un limite su un container impedisce a un servizio che perde memoria di riempire la macchina virtuale. Con docker run, aggiungi --memory 512m. In un file Compose, imposta mem_limit: 512m sul servizio. Il container viene arrestato se lo supera, e docker stats mostra il limite accanto all’utilizzo.
Perché Docker non restituisce la memoria
Arrestare i container libera memoria dentro la macchina virtuale, ma la macchina non sempre la restituisce subito a macOS, quindi il suo valore in Monitoraggio Attività può restare alto. Resource Saver la restituisce tutta spegnendo la macchina quando Docker Desktop è inattivo, e la riavvia in pochi secondi quando un container ne ha bisogno. Chiudere Docker Desktop ha lo stesso effetto.
Docker e lo spazio su disco
Immagini, container arrestati, volumi e cache di build stanno in un’unica immagine disco che cresce mentre lavori, e sul Mac viene conteggiata in Dati di sistema. docker system df mostra quanto occupa ogni tipo. docker system prune rimuove i container arrestati, le reti inutilizzate, le immagini orfane e la cache di build; aggiungi --volumes solo se sei sicuro che nessun volume contenga dati che ti servono. Disk usage limit, accanto a Memory limit nelle impostazioni di Docker Desktop, pone un limite.
Cosa aggiunge Vitals
Vitals mostra ciò che la macchina virtuale non dice a macOS: la memoria di ogni container.
- Un pannello Container con memoria, CPU, rete, disco e porte pubblicate per ogni container, con i progetti Compose raggruppati
- Schede per il container più grande e per quello più vicino al suo limite, e un grafico della memoria per container
- Docker Desktop è una riga nell’elenco delle app con la sua macchina virtuale inclusa; fai clic per vedere i container al suo interno
- I container anche nel menu della barra dei menu, dove con un clic arresti un container dopo la conferma. Vedi come arrestare i container Docker
- Docker Desktop, OrbStack, Colima, Rancher Desktop e Podman
Buono a sapersi
- Vitals legge i dati dei container dal motore e non avvia né rimuove mai container. Arresta è l’unica modifica che fa, e solo quando glielo chiedi.
- Il pannello compare mentre un motore è in esecuzione.
Domande frequenti
Perché Docker usa così tanta memoria sul Mac?
Docker esegue i container in una macchina virtuale Linux che prende fino al suo Memory limit, per impostazione predefinita metà della memoria del Mac. Abbassa Memory limit in Settings → Resources → Advanced, ed esegui docker stats per vedere quale container usa di più.
Cos’è Virtual Machine Service for Docker?
La macchina virtuale in cui Docker Desktop esegue i tuoi container, quando usa il framework Virtualization di Apple. La sua memoria è tutto ciò che usano i container e Linux al suo interno, fino al Memory limit di Docker Desktop.
Come limito la memoria di Docker sul Mac?
In Docker Desktop, apri Settings → Resources → Advanced e abbassa Memory limit. Per un singolo container, usa docker run --memory 512m, o mem_limit: 512m in un file Compose.
Perché Docker non restituisce la memoria dopo che ho arrestato i container?
La macchina virtuale trattiene parte della memoria usata anche dopo che i container si sono fermati. Attiva Resource Saver, che spegne la macchina quando Docker Desktop è inattivo, o chiudi Docker Desktop.
Perché Virtual Machine Service for Docker usa così tanta CPU?
Di solito un container è impegnato, e docker stats mostra quale. Se la CPU resta alta senza container in esecuzione, chiudi e riapri Docker Desktop e aggiornalo: una CPU alta senza niente in esecuzione è stata segnalata come bug in alcune versioni di Docker Desktop.
Quanta memoria dovrei dare a Docker sul Mac?
Poco più di quanto usano i tuoi container nel momento di massimo utilizzo, che vedi con docker stats. Per un tipico ambiente di sviluppo spesso sono tra 2 e 4 GB, molto meno del valore predefinito di metà della memoria del Mac.
Esiste un’app che mostra la memoria dei container Docker sul Mac?
Vitals ha un pannello Container con memoria, CPU, rete, disco e porte di ogni container, per Docker Desktop, OrbStack, Colima, Rancher Desktop e Podman. Arresta anche un container dalla barra dei menu, dopo averti chiesto conferma.
Nel glossario
Altre guide
- Perché il Mac è così lento
- Cosa scarica la batteria del Mac
- Quale app usa la CPU o la memoria
- Perché il Mac non va in standby
- Chrome usa troppa memoria
- Perché le ventole del Mac sono così rumorose
- Come controllare la velocità delle ventole sul Mac
- Come liberare RAM sul Mac
- Come arrestare i container Docker
- Mixer del volume per Mac
- Alternative a Monitoraggio Attività
- Alternative a iStat Menus
- Alternative a Stats
- Task Manager per Mac
- I migliori monitor di sistema per Mac
- Migliori monitor per la barra dei menu del Mac
- I migliori mixer del volume per Mac