如何从docker stats中找到MAX内存?

时间:2017-03-15 12:15:26

标签: docker

使用docker stats,您可以看到容器的内存使用情况。

有没有办法在运行docker stats时找到最高内存使用量?

4 个答案:

答案 0 :(得分:1)

我从here获取了一个采样脚本,并通过@pl_rock汇总了数据。但要小心 - #!/bin/bash "$@" & # Run the given command line in the background. pid=$! echo "" > stats while true; do sleep 1 sample="$(ps -o rss= $pid 2> /dev/null)" || break docker stats --no-stream --format "{{.MemUsage}} {{.Name}} {{.Container}}" | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }' >> stats done for containerid in `awk '/.+/ { print $7 }' stats | sort | uniq` do grep "$containerid" stats | sort -r -k3 | tail -n 1 done 命令只比较字符串值 - 所以结果通常是错误的(但对我来说还可以)。 还要注意,docker有时会报告错误的数字(即,比物理RAM更多分配的mem)。

这是脚本:

{{1}}

答案 1 :(得分:1)

如果您需要查找峰值使用情况,最好请求{'cat': [['stray', 'brown', 'big'], ['house', 'white', 'small']]} 选项并根据总内存计算(除非您限制容器可用的内存)。 .MemPerc具有在容器生命期间发生变化的单位,这会影响结果。

.MemUsage

您可以将正在进行的日志流式传输到文件(或脚本)。

要获得最初请求的最大内存:

docker stats --format 'CPU: {{.CPUPerc}}\tMEM: {{.MemPerc}}'

然后您可以询问系统的总RAM(再次假设您没有限制Docker可用的RAM)并计算:

(timeout 120 docker stats --format '{{.MemPerc}}' <CONTAINER_ID> \
  | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' ; echo) \
  | tr -d '%' | sort -k1,1n | tail -n 1

如上所述,您需要知道在使用超时时容器将运行多长时间,但如果在脚本提交的后台运行awk '/MemTotal/ {print $2}' /proc/meminfo 而没有这个,则可以在容器完成后将其终止。

...

此命令允许您生成cpu / memory load的时间序列:

docker stats

请注意,它管道进入gzip。在这种形式下,每秒可以获得~2行,因此如果不这样,文件会很快变大。

我建议将其用于基准测试和故障排除,而不是用于生产容器

答案 2 :(得分:0)

你可以使用命令:

docker stats --no-stream | awk '{ print $3 }' | sed '1d'|sort | tail -1

它将通过容器提供最高内存。

让我解释一下命令:

 --no-stream :          Disable streaming stats and only pull the first result
 awk '{ print $3 }' :   will print MEM USAGE
 sed '1d' :             will delete first entry that is %
 sort :                 it will sort the result
 tail -1 :              it will give last entry that is highest. 

答案 3 :(得分:0)

就我而言,我想监视一个为我的Web应用程序运行测试的Docker容器。该测试套件相当大,它们在实际的浏览器中包含javascript测试,并且会消耗大量的内存和时间。

理想情况下,我想实时查看当前的内存使用情况,但也要保留历史记录以便以后进行分析。

我最终得到了Keiran's solution的修改和简化版本:

CONTAINER=$(docker ps -q -f name=CONTAINER_NAME)
FORMAT='{{.MemPerc}}\t{{.MemUsage}}\t{{.Name}}'

docker stats --format $FORMAT $CONTAINER | sed -u 's/\x1b\[[0-9;]*[a-zA-Z]//g' | tee stats

注意:

  • CONTAINER=$(docker ps -q -f name=NAME) #按名称查找容器,但是有other options
  • FORMAT='{{.MemPerc}} ...}} # MemPerc首先(进行排序);否则您可以creative
  • sed -u # -u标志很重要,它会关闭缓冲
  • | sed -u 's/\x1b\[[0-9;]*[a-zA-Z]//g' #删除ANSI转义序列
  • | tee stats #不仅显示实时信息,而且还可以写入统计文件
  • 我在准备好命令时按Ctrl-C手动–不理想,但对我来说不错
  • 之后,很容易使用sort -n stats | tail
  • 来找到最大值