【问题标题】:Compute the total memory used by Docker containers in Bash计算 Docker 容器在 Bash 中使用的总内存
【发布时间】:2018-05-28 20:16:45
【问题描述】:

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

【问题讨论】:

    标签: bash docker sh


    【解决方案1】:

    我使用以下命令来计算以 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
    【解决方案2】:

    无论容器大小--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 上
    【解决方案3】:

    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}' - 对所有行求和

    【讨论】:

      猜你喜欢
      • 2021-09-18
      • 2015-10-18
      • 2013-09-28
      • 2021-06-22
      • 1970-01-01
      • 2020-07-14
      • 2022-11-17
      • 2021-06-14
      • 1970-01-01
      相关资源
      最近更新 更多