微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Docker stats 100%内存

我有一个运行带有以下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. 欲获得更多信息:
> https://goldmann.pl/blog/2014/09/11/resource-management-in-docker/解释了Docker资源管理的工作原理,以及它能做什么和不能做什么.
> What is RSS and VSZ in Linux memory management.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐