how to find MAX memory from docker stats?

后端 未结 4 1245
庸人自扰
庸人自扰 2021-02-18 15:26

With docker stats you can see the memory usage of a container over time.

Is there a way to find what the highest value of memory usage was while running

4条回答
  •  感动是毒
    2021-02-18 15:59

    If you need to find the peak usage you are better off requesting the .MemPerc option and calculating based on the total memory (unless you restricted the memory available to the container). .MemUsage has units which change during the life of the container which mess with the result.

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

    You can stream an ongoing log to a file (or script).

    To get just the max memory as originally requested:

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

    And then you can ask the system for its total RAM (again assuming you didn't limit the RAM available to docker) and calculate:

    awk '/MemTotal/ {print $2}' /proc/meminfo
    

    You would need to know how long the container is going to run when using timeout as above, but if docker stats was run without this in background submitted by a script it could kill it once the container completed.

    ...

    This command allows you to generate a time-series of the cpu/memory load:

    (timeout 20 docker stats --format \
      'CPU: {{.CPUPerc}}\tMEM: {{.MemPerc}}'  \
      | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' ; echo) \
      | gzip -c > monitor.log.gz
    

    Note that it pipes into gzip. In this form you get ~2 rows per second so the file would get large rapidly if you don't.

    I'd advise this for benchmarking and trouble shooting rather than use on production containers

提交回复
热议问题