我正在运行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
检查确定丢失或可能丢失的行以确认是否有内存泄漏。