27

我有以下设置:

  1. Perl 服务在容器中运行并将日志写入STDERR
  2. logspout将这些日志发送到远程服务器进行归档

在 600 MB RAM 的机器上。

我还定期在以下位置截断日志:

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

正如这里所建议的那样,以避免 100% 的磁盘情况。

问题

Docker 守护进程从低内存使用开始,最初为 1%,在容器运行 2 天后慢慢增加到 40%。

参考

Docker daemon memory leak 已经在这个 issuethis issue中讨论过了。但是他们现在都关闭了,说在提交时合并。我正在运行最新的 docker 主要版本(Docker 版本 1.4.0,构建 4595d4f),但仍然面临内存使用量单调增加的问题。

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

即使底层日志文件()被清除, docker是否会做一些日志缓冲并且不释放内存?/var/lib/docker/containers/CID/CID-json.log

显然没有办法清除日志。此提交是否会为长时间运行的任务解决此问题?

我不知道为什么 docker daemon 的内存使用量不断增加。我该如何调试这个问题?

4

3 回答 3

3

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

于 2015-03-06T13:11:53.023 回答
0

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

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

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

于 2015-03-06T13:26:03.440 回答
-5
  • 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
于 2017-10-30T11:17:45.043 回答