Estou executando um servidor Ubuntu 18.04 com contêineres Docker (v20.10.12) em execução nele. Tenho cerca de 5 contêineres em execução por vez e eles consomem cerca de 1,5 GB de memória normalmente, enquanto meu servidor tem 8 GB de memória disponível. Um desses 5 contêineres está vazando memória a cada 18-24h, ele consome toda a memória restante e leva cerca de 4-5 GB em troca, o que faz com que meu uso de CPU e disco aumente para 100%, o que por sua vez faz com que o assassino OOM seja gerado e inicie processos de seleção, e um deles é o dockerd.
Depois que o dockerd é eliminado, não consigo encontrar os logs do referido contêiner que apresenta vazamento de memória, pois os únicos que tenho no sistema de arquivos são os contêineres gerados após a reinicialização do dockerd. Então, estou completamente no escuro em termos do que realmente aconteceu naquele contêiner sem os logs, e é exatamente isso que estou tentando encontrar.
Eu descobri qual contêiner vazou grep VmPeak /proc/{PID}/status
e obtive os PIDs com docker inspect -f '{{.State.Pid}}' {CONTAINER_ID}
, que listava o pico de uso de memória de aproximadamente 11 GB em um caso. Mas, quando fui /var/lib/docker/containers/
e verifiquei todas as pastas, nenhuma tinha nenhum registro antes do golpe real do OOM killer e do tempo de reinicialização do dockerd. Também tentei olhar var/log/syslog
e só me mostrou o assassino OOM fazendo seu trabalho e o dockerd entrando em pânico com vários erros de rede e firewall. Se eu estiver errado e precisar me aprofundar no syslog, por favor me avise.
Eu não preciso necessariamente obter esses logs, alguma ajuda para configurar alguma outra solução que preservará os logs em outro lugar para que eu possa verificá-los na próxima vez que ele travar também seria muito útil e poderia resolver o problema. Mas isso não tem relação com o assunto em questão, então entendo se será desconsiderado.