Vazamento de memória do Docker?

4

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.

    
por Ryan Hewitt 07.05.2014 / 06:42

1 resposta

3

Você pode usar valgrind para encontrar problemas relacionados à memória:

Uso:

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

Exemplo:

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

Verifique se há linhas que contêm definitivamente perdidas ou provavelmente perdidas para confirmar que há vazamento de memória.

    
por 03.09.2014 / 23:09