Perdita di memory Docker?

Sto eseguendo Docker 0.9.0

uname -a Linux 3.11.0-18-generic #32-Ubuntu SMP Tue Feb 18 21:11:14 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux 

Ho 40 container in esecuzione contemporaneamente. Ogni contenitore è abbastanza semplice: esegue uno snippet di codice in un process Nodo. Un loop infinito ascolta altri frammenti di codice da eseguire in Nodo.

Occasionalmente contrassero i contenitori per essere uccisi e inizio un altro contenitore per prendere posto. Ho riscontrato degli errori di memory. A volte tutto si blocca e Docker riferisce "non può allocare memory per il nuovo contenitore" e talvolta c'è semplicemente un timeout sul socket.

Il reporting costante dei gatti memorizza e chiama "libero". Questo rapporto suggerisce che ho abbondanza di memory inutilizzata.

Il command

 ps --sort -rss -eo rss,pid,command | grep docker 

in diversi scenari mi dice che quando i nuovi contenitori stanno sostituendo vecchi contenitori, la dimensione di Resident Set Size è sempre in espansione. Se interrompere il servizio in attesa e aspettare un'ora, questo diminuisce un po 'ma non raggiunge mai il livello precedente. Ad esempio non tornerà mai al livello in cui i contenitori originali 40 sono stati creati.

 pmap `pidof docker` 

Dice mostra che tutte le voci sono [anon] – come lo capisco questa è memory riservata da malloc.

Punto di arresto è ~ 2GB assegnato al Demo Demone Docker RSS, a partire da ~ 40M quando è fresco.

Non sono sicuro se questa è una nota di Docker / perdita di memory.


Come potrebbe portre ad un errore di memory fuori dall'opuscolo, a condizione che i report gratuiti 4.5G non siano utilizzati?


Non c'è scambio sul mio sistema.

DETTAGLI IMPORTANTI: Docker non riesce a rimuovere i contenitori uccisi tramite l'API remota con un errore del driver AUFS. Per questo motivo faccio affidamento su un cron esterno per rimuovere i contenitori fermati tramite il CLI.

One Solution collect form web for “Perdita di memory Docker?”

È ansible utilizzare valgrind per trovare problemi correlati alla memory:

Uso:

 valgrind --tool=memcheck program_name (/sbin/docker or wharever the path to docker is) valgrind --leak-check=yes program_name 

Esempio:

 valgrind --leak-check=yes /sbin/httpd 

Controllare che le righe contenenti definitivamente perse o probabilmente perse per confermare che esiste una perdita di memory.

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.