我有以下设置:
- 在容器中运行的 Perl 服务并将日志写出到
STDERR
- logpout 将这些日志传送到远程服务器进行存档
在 600 MB RAM 机器中。
我还定期在以下位置截断日志:
/var/lib/docker/containers/CID/CID-json.log
按照此处的建议避免 100% 磁盘情况。
问题
Docker 守护程序开始时内存使用率较低,最初为 1%,运行容器 2 天后缓慢增加到 40%。
参考
Docker 守护程序内存泄漏在本期和本期中已经讨论过。但是它们现在都关闭了,说在提交时合并。我正在运行最新的 docker 主要版本(Docker 版本 1.4.0,内部版本 4595d4f),但仍然面临单调增加的内存使用问题。
编辑:我做了这个实验:只需在容器中运行一个bash进程,打印出很多行到STDERR,docker守护进程的内存使用速度非常快
docker 是否执行一些日志缓冲,即使清除了底层日志文件 (/var/lib/docker/containers/CID/CID-json.log
)也不会释放内存?
显然没有办法清除日志。此提交能否解决长时间运行的任务的此问题?
我不知道为什么 docker 守护程序的内存使用量不断增加。如何调试此问题?
与日志内存泄漏相关的未决问题:https://github.com/docker/docker/issues/9139
这可能不是您要找的,但我通常会在每天运行一段时间后运行 cron 作业以重新启动我的容器。这确保了容器始终有足够的 RAM,而且我通常会在创建容器时限制容器的最大 ram 使用量。
容器只需几秒钟即可重新启动并提供数据,如果您没有运行高可用性服务并且可以承受几秒钟的停机时间,请考虑重新启动容器(假设您没有永久性卷)。
但是,如果您确实找到了问题的解决方案,请告诉我们。
-
docker rm $(docker ps -a -q)
-
docker rmi --force $(docker images -q)
-
docker system prune --force
需要成为根用户。
-
systemctl stop docker
-
rm -rf /var/lib/docker/aufs
-
apt-get autoclean
-
apt-get autoremove
-
systemctl start docker