gpt4 book ai didi

java - Docker 统计 100% 内存

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:07:58 48 4
gpt4 key购买 nike

我有一个运行带有以下 jvm 参数的 java 应用程序的容器:

-XX:+UseG1GC -Xms512m -Xmx2048m -XX:MaxPermSize=256m

我正在使用 docker 内存限制选项:

docker run -it -m 2304m foo bash

在容器初始化后立即运行 docker stats myApp 会得到:

CONTAINER   CPU %    MEM USAGE/LIMIT     MEM %   NET I/O
myApp 0.17% 660.5 MB/2.416 GB 27.34% 240.8 kB/133.4 kB

但几个小时后,我得到了以下统计数据:

CONTAINER   CPU %    MEM USAGE/LIMIT     MEM %   NET I/O
myApp 202.18% 2.416 GB/2.416 GB 100.00% 27.67 GB/19.49 GB

不过,如果我查看容器内正在运行的应用程序的进程执行详细信息,我的使用量为 ~735MB 并且 myApp 继续计算请求,没有任何问题:

me@docker-container ~]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
me+ 1 0.0 0.0 11636 1324 ? Ss 13:44 0:00 /bin/bash /home/bar/service/start-myApp.sh
me+ 6 113 4.5 5014152 735736 ? Sl 13:44 438:46 java -XX:+UseG1GC -Xms512m -Xmx2048m -XX:MaxPermSize=256m -jar myApp-service-1.0-final.jar
me+ 481 0.0 0.0 11768 1820 ? Ss 20:09 0:00 bash
me+ 497 0.0 0.0 35888 1464 ? R+ 20:10 0:00 ps aux

值得一提的是,我已经使用 jconsole 监控进程 6,一切看起来都很好。

如果内容不需要,为什么 docker 容器会使用所有可用内存?我预计 docker 会使用比 myApp 多一点的内存……而不是 100% 的可用内存。

最佳答案

让我们从这里开始:

 -XX:+UseG1GC -Xms512m -Xmx2048m -XX:MaxPermSize=256m

也就是说,使用一个从 0.5Gb 开始并可以增长到 2GB 的堆,以及一个 0.25GB 的 permgen 堆。这还不包括 JVM 的其他非堆使用;例如内存映射文件、线程堆栈、缓存的 JAR 文件等。

然后你说 docker 报告容器正在使用 2.416 GB。这并不奇怪。 2.42 - 2.25 是 0.17GB,对于非堆内存使用来说并不过分。

最后,735736 RSS 值告诉您常驻集大小;即该进程正在使用的当前物理 RAM 量。 JVM 参数和 docker stats 命令是虚拟内存大小的度量。


Why is docker container using all the memory available if its content does not need it? I expected that docker would use a little more memory than myApp... not 100% of the available memory.

我认为您误读了 ps aux 输出。 RSS 只是正在使用的物理内存。事实上,你的进程的总内存使用量由 VSZ 给出......它是 5GB。现在 >确实 < 看起来很大,但不清楚为什么这么大。但从表面上看,这意味着 Docker 低估了容器的真实内存/虚拟内存使用情况。

另一件事是,Docker 容器不会将容器中的应用程序与容器外其他事物的资源需求隔离开来。 JVM 将与容器内外的其他应用程序竞争物理 RAM。

更多信息:

关于java - Docker 统计 100% 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36461821/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com