Fuite de mémoire de démon Docker due à des logs provenant d'un processus de longue durée
j'ai la configuration suivante:
- service Perl en cours d'exécution dans un conteneur et l'écriture logs out à STDERR
- logspout pour expédier ces journaux à un serveur distant pour archivage
dans une machine RAM de 600 MB.
Je tronque aussi les bûches périodiquement à:
/ var/lib/docker/containers/CID / CID-json.log
comme suggéré ici pour éviter 100% scénarios de disque.
Problème
Docker daemon commence avec une faible utilisation de la mémoire, 1% d'abord et augmente lentement jusqu'à 40% après 2 jours de fonctionnement du conteneur.
référence
fuite de mémoire Docker daemon a été parlé dans ce numéro et ce numéro . Mais les deux sont fermés maintenant en disant fusionné à un engagement. Je suis en train d'exécuter la dernière version majeure de docker (Version 1.4.0 de Docker, build 4595d4f), mais je dois quand même faire face à une augmentation monotone de l'utilisation de la mémoire.
EDIT: j'ai fait cette expérience: il suffit d'exécuter un processus bash dans le conteneur, imprimer un grand nombre de lignes à STDERR, docker l'utilisation de la mémoire du processus daemon accélère très rapidement
Does docker does some journal de mise en mémoire tampon et de ne pas libérer de la mémoire même si le fichier de log (/var/lib/docker/conteneurs/CID/CID-json.journal) est désactivée?
il y a apparemment no way pour nettoyer les bûches. Va ce commit résoudre ce problème pour les longues tâches en cours d'exécution?
Je ne sais pas pourquoi l'utilisation de la mémoire du démon docker continue d'augmenter. Comment corriger ce problème?
3 réponses
il reste au moins un problème en suspens concernant les fuites de mémoire avec les logs: https://github.com/docker/docker/issues/9139
ce n'est peut-être pas ce que vous cherchez, mais je fais habituellement un travail cron pour redémarrer mes conteneurs après un certain temps tous les jours. Cela garantit que le conteneur a assez de RAM tout le temps, et aussi je limite généralement l'utilisation maximale de ram par le conteneur tout en les créant.
conteneurs ne prennent que quelques secondes pour redémarrer et servir des données et si vous n'êtes pas en cours d'exécution D'un service de haute disponibilité et peut se permettre quelques secondes de temps d'arrêt, envisager redémarrage du conteneur (en supposant que vous n'avez pas de volumes persistants).
Toutefois, si vous trouvez une solution à votre problème, faites-le nous savoir.
-
docker rm $(docker ps-a-q)
-
docker rmi --force $(docker images-q)
-
docker système de pruneau --force
Besoin d'être l'utilisateur root.
-
systemctl stop docker
-
rm-rf / var/lib / docker/aufs
-
apt-get autoclean
-
apt-get autoremove
-
systemctl start menu fixe