Docker 内存泄漏?

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 报告“无法为新容器分配内存”,有时只是套接字超时。

持续报告 cat meminfo 并调用“free”。此报告表明我有充足未使用的内存。

命令

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

在不同情况下,我发现随着新容器替换旧容器,驻留集大小内存不断扩大。如果我按原样停止服务并等待一个小时,这个内存会有所减少,但永远不会达到之前的水平。例如,它永远不会降回最初创建 40 个容器时的水平。

pmap `pidof docker`

表明所有条目都是 [anon] - 据我了解,这是 malloc 保留的内存。

崩溃点是分配给 Docker 守护进程 RSS 的约 2GB,而新鲜时则为约 40M。

我不确定这是否是另一个 Docker 错误/内存泄漏。


假设以下情况,这如何导致内存不足错误自由的报告 4.5G 未使用?


我的系统上没有交换。

重要细节:Docker 无法通过 Remote API 移除已终止的容器,原因是出现 AUFS 驱动程序错误。因此,我依靠外部 cron 通过 CLI 移除已停止的容器。

答案1

您可以使用瓦尔格林德查找与内存相关的问题:

用法:

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

检查包含以下内容的行肯定输了或者可能丢失了确认存在内存泄漏。

相关内容