首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何记录Docker容器的峰值内存使用量?

如何记录Docker容器的峰值内存使用量?
EN

Stack Overflow用户
提问于 2019-10-08 09:23:40
回答 2查看 4.9K关注 0票数 14

我正在运行许多短命的码头容器,每个容器都进行一些内存密集型的批处理。我正在寻找一种方法来查找每个容器在运行时遇到的峰值内存使用情况。了解这一点将允许我优化运行这些容器的基础设施,以便将来运行。

实现这一目标的一个简单方法是将docker stats的流输出重定向到某个文件:docker stats container_id > stats.log。但是,这需要为每个容器运行一个进程,然后对非常冗长的日志进行排序,以找到峰值使用情况。我在想有没有更简单的办法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-08 10:12:29

如果您对容器中有PID=1的进程感兴趣,您可以找到该进程在主机上的PID,然后使用:

代码语言:javascript
复制
grep VmPeak /proc/$PID/status

使用mongo容器的示例:

这个容器只有一个进程:

代码语言:javascript
复制
$ docker container exec -it mongo top -bn 1
top - 10:04:51 up 32 min,  0 users,  load average: 0.36, 0.52, 0.55
Tasks:   2 total,   1 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  6.1 us,  2.0 sy,  0.3 ni, 90.6 id,  0.7 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem :  6103572 total,  2642744 free,  1352032 used,  2108796 buff/cache
KiB Swap:  1942896 total,  1942896 free,        0 used.  4277928 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
   64 root      20   0   38624   3116   2724 R   6.7  0.1   0:00.89 top
    1 mongodb   20   0 1094540  80100  35916 S   0.0  1.3   0:22.51 mongod

要从主机的角度获取此进程的PID

代码语言:javascript
复制
$ docker inspect -f '{{.State.Pid}}' mongo
2532

最后:

代码语言:javascript
复制
$ grep VmPeak /proc/2532/status
VmPeak:  1094540 kB

链接:

票数 13
EN

Stack Overflow用户

发布于 2022-01-14 13:49:10

docker stats有自定义输出的--format选项。例如,我们只能输出内存使用情况:

代码语言:javascript
复制
 docker stats --no-stream --format '{{.MemUsage}}' CONTAINER_ID 
516KiB / 8GiB

命令中的CONTAINER_ID必须替换为容器的ID (我们可以用docker ps获得)。

516 8GiB是容器的当前内存使用情况,8 8GiB是容器允许使用的最大内存。

在GNU上,我们可以使用cut从输出中筛选出内存使用情况,并将输出重定向到一个文件中:

代码语言:javascript
复制
docker stats --no-stream --format '{{.MemUsage}}' CONTAINER_ID | cut -d '/' -f 1 >>docker-stats

最后,我们可以将此命令放入while循环,并在迭代之间添加一秒钟的延迟:

代码语言:javascript
复制
while true; do docker stats --no-stream --format '{{.MemUsage}}' CONTAINER_ID | cut -d '/' -f 1 >>docker-stats; sleep 1; done

这样,在docker-stats文件中,我们将获得一个具有1秒分辨率的容器的内存使用值列表。当然,如果一个高峰持续不到1秒,我们可能会错过它。

码头统计博士。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58283529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档