Search code examples
javadockerjvm

docker stats shows zero memory usage even for running containers


I have two containers ran by Docker Swarm:

# docker ps
CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS              PORTS               NAMES
18f1e7d79f5b        default/image1:latest               "/bin/sh -c 'java ..."   12 hours ago        Up 12 hours                             image1.1.x56zz152kmqtqpxzle5nkbs8r
11d1f05fcff1        default/image2:latest               "java -cp /app/sca..."   13 hours ago        Up 13 hours                             image2.1.ljztzeeh8i5r6ebr3n4hcj45e

$ docker stats --no-stream
CONTAINER           CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
18f1e7d79f5b        0.92%               0B / 0B             0.00%               648B / 0B           0B / 0B             0
11d1f05fcff1        0.91%               0B / 0B             0.00%               39.9MB / 26.9MB     51.2MB / 0B         0

Host OS is Debian Jessie. There are JVM applications in both containers. Why does docker stats show zero memory usage? Should I configure my Java apps somehow to be able to see memory usage in docker stats? Is there some other way to check memory usage?


Solution

  • It is quite possible that memory cgroup accounting is not enabled in your kernel (which is a common problem that others have hit as well over time on Debian/Ubuntu based installs).

    Can you verify with docker info or the output from the daemon that you aren't seeing messages like the following, nicely summarized in this blog post: Debian Jessie w/Docker? If so, the fix is also listed there, as well as in the GitHub issue I linked in the first sentence. There is also a section in the install documentation about enabling cgroup memory accounting although it only mentions Ubuntu and not Debian.