Docker内存泄漏?

我正在运行Docker 0.9.0

uname -a Linux 3.11.0-18-generic #32-Ubuntu SMP Tue Feb 18 21:11:14 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux 

我有40个容器一次运行。 每个容器都相当简单 – 它在Node进程中运行一段代码。 无限循环监听更多的代码片段在Node中运行。

偶尔我会标记这些容器被杀死,然后我启动另一个容器来代替它。 我一直在遇到内存错误。 有时候一切崩溃,Docker报告“无法为新容器分配内存”,有时候套接字上只有一个超时。

不断报告猫meminfo和调用“免费”。 这个报告表明我有足够的内存未使用。

命令

 ps --sort -rss -eo rss,pid,command | grep docker 

在不同的情况下告诉我,由于新的容器正在取代旧的容器,驻留集大小的内存不断扩大。 如果我现在停止服务,并等待一小时,这有点下降,但从来没有达到以前的水平。 例如,它永远不会回落到原来的40个容器被创build的水平。

 pmap `pidof docker` 

告诉显示所有条目都是[anon] – 据我所知这是malloc保留的内存。

Docker守护程序RSS分配的崩溃点约为2GB,最新的时候约为40M。

我不确定这是否是Docker漏洞/内存泄漏


如果免费报告4.5G未使用,这将如何导致内存不足错误?


我的系统没有交换。

重要详细信息:Docker无法通过远程API删除具有AUFS驱动程序错误的已杀死的容器。 由于这个原因,我依靠外部cron通过CLI去除停止的容器。

你可以使用valgrind来查找内存相关的问题:

用法:

 valgrind --tool=memcheck program_name (/sbin/docker or wharever the path to docker is) valgrind --leak-check=yes program_name 

例:

 valgrind --leak-check=yes /sbin/httpd 

检查确定丢失可能丢失的行以确认是否有内存泄漏。