【发布时间】:2018-05-28 20:16:45
【问题描述】:
如何在一个Bash 命令行中计算运行在本地Docker 引擎上的Docker 容器使用的总内存?
【问题讨论】:
如何在一个Bash 命令行中计算运行在本地Docker 引擎上的Docker 容器使用的总内存?
【问题讨论】:
我使用以下命令来计算以 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"}'
【讨论】:
larger than 1GiB 仅在内存使用量有 3 位小数时有效,否则 1.33GiB 变为 133MiB
无论容器大小--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 "$@"
【讨论】:
numfmt 在 Linux 上而不是在 macOS 上
tl;博士
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}' - 对所有行求和
【讨论】: