我有两个由 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
主机操作系统是 Debian Jessie。两个容器中都有 JVM 应用程序。为什么
docker stats
显示零内存使用?我应该以某种方式配置我的 Java 应用程序以便能够在 docker stats
中查看内存使用情况吗? ?还有其他方法可以检查内存使用情况吗?
最佳答案
很有可能您的内核中没有启用内存 cgroup 记帐(这是一个 common problem,随着时间的推移,其他人在基于 Debian/Ubuntu 的安装中也遇到了这种情况)。
你能用docker info
验证吗?或者守护进程的输出表明您没有看到如下消息,这篇博文很好地总结了这一点:http://awhitehatter.me/debian-jessie-wdocker/ ?如果是这样,修复程序也列在那里,以及我在第一句话中链接的 GitHub 问题中。安装文档中还有一节关于 enabling cgroup memory accounting虽然它只提到了 Ubuntu 而不是 Debian。
关于java - 即使运行容器,docker stats 也显示零内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45541242/