我创建了一个新的docker服务,并确定了它所需的资源。由于将RAM应用于新服务是贪婪的 - 说容器可以有8GB的RAM来获取它们 - 我不想浪费集群的资源。
现在我正在尝试找出Docker在其峰值时运行的内存量。
例如,我创建了一个httpie-image(对于正确的偏执,我执行的Dockerfile is also on dockerhub:
0
我知道有一个docker stats
命令,但它似乎显示当前内存使用情况,我真的不想监视它。
如果我在容器结束后运行它,它将显示d
。 (要获取容器ID,我使用$ docker run -itd k0pernikus/httpie-docker-alpine HEAD https://stackoverflow.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
它会显示:
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab idMso="TabAddIns" label="NEW_TAB">
<group id="StatsGroup" label="Statistics">
<labelControl id="lblSmallText" label="Stats are: "/>
<labelControl id="lblNormalText" label="Dollars Saved"/>
<labelControl id="lblBigText" label="$12345"/>
<!--
<labelControl id="lblNormalText" label="as of today"/>
-->
</group>
</tab>
</tabs>
</ribbon>
</customUI>
然而它最多消耗了多少RAM?
答案 0 :(得分:1)
tl; dr:
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 inspect发现的完整容器ID:
docker inspect --format="{{.Id}}" $CONTAINER_NAME
您可以获得使用的最大内存:
cat /sys/fs/cgroup/memory/docker/${CONTAINER_ID}/memory.max_usage_in_bytes
容器必须运行才能正常工作。