web-dev-qa-db-fra.com

Fuite de mémoire du démon Docker due aux journaux du long processus

J'ai la configuration suivante:

  1. Le service Perl s'exécutant dans un conteneur et écrivant se déconnecte vers STDERR
  2. logspout pour envoyer ces journaux à un serveur distant en vue de leur archivage

dans un 600 MB RAM machine.

J'ai également tronquer les journaux périodiquement à:

/var/lib/docker/containers/CID/CID-json.log

comme suggéré ici pour éviter les scénarios de 100% disque.

Problème

Le démon Docker commence avec une utilisation de mémoire réduite, 1% initialement et augmente lentement jusqu'à 40% après 2 jours d’exécution du conteneur. 

Référence

La fuite de mémoire du démon Docker a été abordée dans ce problème } et ce problème . Mais les deux sont fermés maintenant en train de dire fusionné à un commit. Lance la dernière version majeure de docker (version 1.4.0 de Docker, build 4595d4f), mais continue de faire face à un problème d’utilisation de la mémoire de plus en plus monotone.

EDIT: J’ai fait cette expérience: il suffit d’exécuter un processus bash dans le conteneur, d’imprimer beaucoup de lignes sur STDERR, la mémoire utilisée par le processus du démon de docker s’accélère très rapidement

Le menu fixe effectue-t-il un mise en mémoire tampon et ne libère pas de mémoire, même si le fichier journal sous-jacent (/var/lib/docker/containers/CID/CID-json.log) est effacé?

Il y a apparemment aucun moyen d'effacer les journaux. Est-ce que this commit _ résoudra ce problème pour les tâches de longue durée? 

Je ne sais pas pourquoi l'utilisation de la mémoire du démon de docker ne cesse d'augmenter. Comment déboguer ce problème?

21
alpha_cod

Il reste encore au moins un problème en suspens relatif aux fuites de mémoire avec les journaux: https://github.com/docker/docker/issues/9139

2
mhsmith

Ce n'est peut-être pas ce que vous recherchez, mais je lance généralement un travail cron pour redémarrer mes conteneurs au bout d'un certain temps tous les jours. Cela garantit que le conteneur a suffisamment de RAM tout le temps, et je limite généralement l'utilisation maximale du ram par le conteneur lors de leur création. 

Les conteneurs ne prennent que quelques secondes pour redémarrer et servir les données. Si vous n'exécutez pas de service de haute disponibilité et pouvez vous permettre quelques secondes d'indisponibilité, envisagez de le redémarrer (en supposant que vous n'avez pas de volumes persistants). 

Toutefois, si vous trouvez une solution à votre problème, faites-le nous savoir.

0
Sohail