由于长时间运行的进程日志,Docker守护进程内存泄漏

我有以下设置:

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

在一个600 MB的RAM机器。

我也定期截断日志:

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

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

问题

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

参考

在这个问题和这个问题上已经讨论了Docker守护进程的内存泄漏。 但是他们两人现在都被closures了,并表示合并在一个提交中。 我运行的是Docker的最新版本 (Docker版本1.4.0,版本4595d4f),但仍然面临单调增加的内存使用问题。

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

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

显然没有办法清除日志。 这将提交解决长期运行的任务这个问题?

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

至less还有一个未解决的日志泄漏问题: https : //github.com/docker/docker/issues/9139

这可能不是你正在寻找的,但我通常运行一个cron工作,每天在一段时间后重新启动我的容器。 这确保容器始终有足够的RAM,而且我通常还会在创build容器时限制容器的最大内存使用量。

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

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

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

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

  • docker系统剪枝力

需要成为root用户。

  • systemctl停泊docker

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

  • apt-get autoclean

  • apt-get autoremove

  • systemctl启动泊坞窗