在Bash中计算Docker容器使用的总内存

19
如何在一个Bash命令行中计算本地Docker引擎上运行的Docker容器使用的总内存?
3个回答

25

我使用以下命令来计算使用的总内存(以MB为单位)。

docker stats --no-stream --format 'table {{.MemUsage}}' | sed 's/[A-Za-z]*//g' | awk '{sum += $1} END {print sum "MB"}'

或者如果有任何一个大于1GiB

docker stats --no-stream --format 'table {{.MemUsage}}' | sed 's/\.\([0-9]*\)GiB/\1MiB/g' | sed 's/[A-Za-z]*//g' | awk '{sum += $1} END {print sum "MB"}'

1
只有当内存使用量有3个小数位时,“大于1GiB”才有效,否则1.33GiB将变成133MiB。 - Tom Kay

6
总之,太长不看。
docker stats --no-stream --format '{{.MemUsage}}' | awk '{print $1}' | sed 's/GiB/ * 1024/;s/MiB//;s/KiB/ \/ 1024/' | bc -l | awk '{s+=$1} END {print s}'

对此进行分解:

docker stats --no-stream --format '{{.MemUsage}}' - 仅获取内存使用情况

awk '{print $1}' - 从每行中剥离出总内存

sed 's/GiB/ * 1024/;s/MiB//;s/KiB/ \/ 1024/' - 将值规范化为 MiB

bc -l - 运行计算

awk '{s+=$1} END {print s}' - 求所有行的和


如果你想要得到 GiB,可以使用以下的 sed 命令:
sed 's/GiB//;s/MiB/ \/ 1024/;s/KiB/ \/ 1024^2/'
- Rafael-WO

4

获取容器的总内存,无论容器大小是KiB、MiB还是GiB

docker stats --no-stream --format 'table {{.MemUsage}}' | sed -n '1!p' | cut -d '/' -f1 | sed 's/GiB/ * 1024 MiB/;s/MiB/ * 1024 KiB/;s/KiB/ * 1024/; s/$/ +\\/; $a0' | bc | numfmt --to=iec-i --suffix=B "$@"


1
FYI,“numfmt”仅适用于Linux,而不适用于macOS。 - Andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接