由于长时间运行的进程日志,Docker守护进程内存泄漏
我有以下设置:
- 在容器中运行Perl服务,并将注销写出到STDERR
- 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启动泊坞窗