如何找出 docker 运行 执行最多消耗多少 RAM?
How to find out how much RAM a docker run execution consumed at maximum?
我创建了一个新的 docker 服务并正在确定其所需的资源。由于将 RAM 应用于新服务是贪婪的——说容器可以有 8GB 的 RAM 它会得到它们——我不想浪费集群的资源。
现在我想知道 docker 运行 在其峰值时占用了多少 RAM。
例如,我创建了一个 httpie-image(对于正确的偏执狂,我通过以下方式执行的 Dockerfile is also on dockerhub:
docker run -it k0pernikus/httpie-docker-alpine HEAD https://whosebug.com/
我知道有一个 docker stats
命令,但它似乎显示 当前 内存使用情况,我真的不想监视它。
如果我在容器结束后运行它,它会显示0
。 (要获取容器 ID,我使用 d
标志。)
$ docker run -itd k0pernikus/httpie-docker-alpine HEAD https://whosebug.com/
132a93ffc9e297250b8ca37b2563aa2b5e423e146890fe3383a91a7f26ef990c
$ docker stats 132a93ffc9e297250b8ca37b2563aa2b5e423e146890fe3383a91a7f26ef990c
它将显示:
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
132a93ffc9e297250b8ca37b2563aa2b5e423e146890fe3383a91a7f26ef990c 0.00% 0 B / 0 B 0.00% 0 B / 0 B 0 B / 0 B 0
然而它最多消耗多少 RAM?
tl;博士:
- 启用内存统计
cat /sys/fs/cgroup/memory/docker/${CONTAINER_ID}/memory.max_usage_in_bytes
Docker uses cgroups
under the hood。我们只需要向内核询问正确的问题,即 cat
正确的文件。为此,必须启用内存记帐(如文档中所述)。
在基于 systemd 的系统上,这非常简单。为 docker 守护程序创建一个插入式配置:
systemctl set-property docker.service MemoryAccounting=yes
systemctl daemon-reload
systemctl restart docker.service
(这会增加一点开销,因为每次容器分配 RAM 时都必须更新计数器。更多详细信息:https://lwn.net/Articles/606004/)
然后使用您可以通过 docker 检查发现的完整容器 ID:
docker inspect --format="{{.Id}}" $CONTAINER_NAME
您可以获得最大使用内存:
cat /sys/fs/cgroup/memory/docker/${CONTAINER_ID}/memory.max_usage_in_bytes
容器必须是 运行 才能工作。
我创建了一个新的 docker 服务并正在确定其所需的资源。由于将 RAM 应用于新服务是贪婪的——说容器可以有 8GB 的 RAM 它会得到它们——我不想浪费集群的资源。
现在我想知道 docker 运行 在其峰值时占用了多少 RAM。
例如,我创建了一个 httpie-image(对于正确的偏执狂,我通过以下方式执行的 Dockerfile is also on dockerhub:
docker run -it k0pernikus/httpie-docker-alpine HEAD https://whosebug.com/
我知道有一个 docker stats
命令,但它似乎显示 当前 内存使用情况,我真的不想监视它。
如果我在容器结束后运行它,它会显示0
。 (要获取容器 ID,我使用 d
标志。)
$ docker run -itd k0pernikus/httpie-docker-alpine HEAD https://whosebug.com/
132a93ffc9e297250b8ca37b2563aa2b5e423e146890fe3383a91a7f26ef990c
$ docker stats 132a93ffc9e297250b8ca37b2563aa2b5e423e146890fe3383a91a7f26ef990c
它将显示:
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
132a93ffc9e297250b8ca37b2563aa2b5e423e146890fe3383a91a7f26ef990c 0.00% 0 B / 0 B 0.00% 0 B / 0 B 0 B / 0 B 0
然而它最多消耗多少 RAM?
tl;博士:
- 启用内存统计
cat /sys/fs/cgroup/memory/docker/${CONTAINER_ID}/memory.max_usage_in_bytes
Docker uses cgroups
under the hood。我们只需要向内核询问正确的问题,即 cat
正确的文件。为此,必须启用内存记帐(如文档中所述)。
在基于 systemd 的系统上,这非常简单。为 docker 守护程序创建一个插入式配置:
systemctl set-property docker.service MemoryAccounting=yes
systemctl daemon-reload
systemctl restart docker.service
(这会增加一点开销,因为每次容器分配 RAM 时都必须更新计数器。更多详细信息:https://lwn.net/Articles/606004/)
然后使用您可以通过 docker 检查发现的完整容器 ID:
docker inspect --format="{{.Id}}" $CONTAINER_NAME
您可以获得最大使用内存:
cat /sys/fs/cgroup/memory/docker/${CONTAINER_ID}/memory.max_usage_in_bytes
容器必须是 运行 才能工作。