Estou executando o 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
Eu tenho 40 contêineres funcionando ao mesmo tempo. Cada contêiner é bastante simples - ele executa um trecho de código em um processo do Nó. Um loop infinito ouve mais trechos de código para serem executados no Node.
Ocasionalmente, marquei esses contêineres para serem mortos e iniciei outro contêiner para ocupar o seu lugar. Eu tenho experimentado erros de memória. Às vezes, tudo falha e os relatórios do Docker "não podem alocar memória para um novo contêiner" e, às vezes, há apenas um tempo limite no soquete.
Constant relatando meminfo de gatos e chama de "free". Este relatório sugere que tenho bastante memória não utilizada.
O comando
ps --sort -rss -eo rss,pid,command | grep docker
em diferentes cenários me informa que, à medida que novos contêineres estão substituindo contêineres antigos, a memória do Tamanho do conjunto de residentes está sempre expandindo. Se eu parar o serviço como está e esperar uma hora, isso diminui um pouco, mas nunca atinge o nível anterior. Por exemplo, nunca voltará ao nível em que os 40 contêineres originais foram criados.
pmap 'pidof docker'
Tells mostra que todas as entradas são [anon] - pelo que entendi, esta é uma memória reservada por malloc.
O ponto de falha é de ~ 2 GB alocado para o daemon do Docker RSS, de ~ 40M quando novo.
Não tenho certeza se isso é um vazamento do [Docker bug / memory].
Como isso pode levar a um erro de falta de memória, desde que o free relate o 4.5G não utilizado?
Não há troca no meu sistema.
DETALHE IMPORTANTE: O Docker não remove os contêineres mortos por meio da API Remota com um erro do driver AUFS. Por esse motivo, confio em um cron externo para remover contêineres interrompidos por meio da CLI.