Docker守护程序由于长时间运行的进程中的日志而导致内存泄漏

时间:2014-12-23 21:28:53

标签: memory docker lxc dockerfile

我有以下设置:

  1. Perl服务在容器中运行并将日志写入STDERR
  2. logspout将这些日志发送到远程服务器进行存档
  3. 在600 MB RAM机器中。

    我还会定期截断日志:

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

    建议here以避免100%的磁盘情况。

    问题

    Docker守护程序启动时内存使用率较低,最初为1%,运行容器2天后缓慢增加到40%。

    参考

    this issuethis issue中讨论过Docker守护程序内存泄漏问题。但他们两人现在都在关闭,并在提交时合并。我正在运行docker的最新主要版本(Docker版本1.4.0,版本4595d4f),但仍面临单调增加的内存使用问题。

    编辑:我做了这个实验:只需在容器中运行一个bash进程,打印出很多行到STDERR,docker守护程序进程的内存使用量加速很快

    即使基础日志文件(/var/lib/docker/containers/CID/CID-json.log)被清除,docker是否会执行某些log buffering并且不会释放内存?

    显然no way清除日志。对于长时间运行的任务,this commit会解决这个问题吗?

    我不知道为什么docker守护进程的内存使用量不断增加。如何调试此问题?

3 个答案:

答案 0 :(得分:2)

至少还有一个与日志内存泄漏有关的未决问题:https://github.com/docker/docker/issues/9139

答案 1 :(得分:0)

这可能不是你想要的,但我经常在一天的一段时间后运行一个cron作业来重启我的容器。这样可以确保容器始终具有足够的RAM,而且我通常也会在创建容器时限制容器的最大ram使用量。

容器只需几秒钟即可重新启动并提供数据,如果您没有运行高可用性服务并且可以承受几秒钟的停机时间,请考虑重新启动容器(假设您没有持久卷)。

但是,如果您确实找到了问题的解决方案,请告诉我们。

答案 2 :(得分:-2)

  • docker rm $(docker ps -a -q)

  • docker rmi --force $(docker images -q)

  • docker system prune --force

需要是root用户。

  • systemctl stop docker

  • rm -rf / var / lib / docker / aufs

  • apt-get autoclean

  • apt-get autoremove

  • systemctl start docker