相关疑难解决方法(0)

为什么我的 Java 进程在 docker 容器和主机中消耗了两倍的内存

我在尝试分析在 docker 容器与主机上运行的 Java 应用程序中的内存消耗时遇到了一个有趣的问题。

  1. Java 应用程序是 Jetty 服务器 9.4.9 上的 Web 应用程序
  2. Java 版本:1.8
  3. 主机:MAC
  4. Docker 镜像:jetty:9.4-jre8
  5. docker 守护进程是 18.03.1-ce 版本。

在主机上,我使用 Yourkit 工具来分析内存消耗。

对于 docker 容器 docker stats <docker id/name>

我得到的是,在 MAC yourkit 上显示了 50M 非堆大小 + ~40M 堆大小,总共 ~ 100M

在此处输入图片说明

然而,当我在容器上部署和运行相同的战争时,统计数据显示为200M

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
879fb113ca8d        jetty-app           0.19%               214.6MiB / 1.952GiB   10.74%              1.49MB / 88.9kB     31.7MB / 6.42MB     29
Run Code Online (Sandbox Code Playgroud)

任何人都可以对这种现象有所了解吗?

假设stats提供了错误的结果,我尝试使用--memory …

java memory heap-memory docker

7
推荐指数
1
解决办法
2103
查看次数

标签 统计

docker ×1

heap-memory ×1

java ×1

memory ×1