Docker stats memory anomaly

When I do

docker stats --no-stream=true , I get this

CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O
object-main 348.57% 96.52 GB/96.64 GB 99.88% 0 B/0 B

This shows 96.52 GB is being used.

But when I do free -m I get the following

montana@cluster0 ~ $ free -g
total used free shared buffers cached
Mem: 125 111 14 9 0 42
-/+ buffers/cache: 68 57
Swap: 0 0 0

This shows 68GB is used and 57 GB is free.

something is not adding up

That looks consistent to me: your container is using 96.52 GB, or 99.88% of its limit of 96.64 GB.

How did you start your container? Did you specify something along the lines of `docker run -m 100G’? Docker run reference | Docker Docs has the details.

Hmm…the docker stats documentation points at https://docs.docker.com/engine/reference/api/docker_remote_api_v1.23/#get-container-stats-based-on-resource-usage, which hints that the number is the resident set size (RSS), which should map to actual physical memory usage. That is kind of odd. (I don’t think memory you allocate but never use counts against your RSS, though it does count against your virtual memory size if top or ps report that; the Go runtime in particular preallocates tons of memory expecting the OS to only actually dole it out as needed.)