如何在一个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"}'
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}'
- 求所有行的和
sed
命令:sed 's/GiB//;s/MiB/ \/ 1024/;s/KiB/ \/ 1024^2/'
- Rafael-WO获取容器的总内存,无论容器大小是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 "$@"