深入理解 Docker - 内存管理
Docker 自身提供了一种对内存进行监控的机制,我们可以通过使用 docker stats
进行概览。
我们首先了解下 Linux 中,如何进行内存管理的
一 Linux 的内存管理
在 linux 系统中,我们一般使用 free
命令来查看内存的占用等情况。
二 Docker 内存管理
docker 的 docker stats
实际是通过使用 cgroups
来对指定属性进行值计算求得的。
1. docker原生内存监控
docker stats
的具体实现可以通过 libcontainer
了解到详情。容器的内存监控分为 cache
,usage
swap usage
kernel usage
kernel tcp usage
。
其中 cache
是从 memory.stat
中的 cache
获取。
usage
是使用 memory.usage_in_bytes
和 memory.limit_in_bytes
进行相除来计算使用率。这一方式有一个弊端,就是不够细化,没有区分出 cache
部分,不能真正反映内存使用率。因为一般来说 cache
是可以复用的内存部分,因此一般将其计入到可使用的部分。