本文小编为大家详细介绍“容器环境的JVM内存如何设置”,内容详细,步骤清晰,细节处理妥当,希望这篇“容器环境的JVM内存如何设置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。默认情况下,jvm自动分配的heap大小取决于机器配置,比如我们到一台64G内存服务器:可以看到,JVM 分配的最大MaxHeapSize为 16G,计算公式如下:MaxRAMFraction 默认是4,意味着,每个jvm最多使用25%的机器内存。但是需要注意的是,JVM实际使用的内存会比heap内存大:默认的XSS通常在256KB到1MB,也就是说每个线程会分配最少256K额外的内存,constant overhead是JVM分配的其他内存。我们可以通过-Xmx
指定最大堆大小。此外,还可以使用XX:MaxRAM
来指定。但是指定-Xmx或者MaxRAM需要了解机器的内存,更好的方式是设置MaxRAMFraction
,以下是不同的Fraction对应的可用内存比例:+—————免费云主机域名-+——————-+
| MaxRAMFraction | % of RAM for heap |
|—————-+——————-|
| 1 | 100% |
| 2 | 50% |
| 3 | 33% |
| 4 | 25% |
+—————-+——————-+容器环境,由于java获取不到容器的内存限制,只能获取到服务器的配置:这样容易引起不必要问题,例如限制容器使用100M内存,但是jvm根据服务器配置来分配初始化内存,导致java进程超过容器限制被kill掉。为了解决这个问题,可以设置-Xmx或者MaxRAM来解决,但就想第一部分描述的一样,这样太不优雅了!为了解决这个问题,Java 10 引入了 +UseContainerSupport
(默认情况下启用),通过这个特性,可以使得JVM在容器环境分配合理的堆内存。 并且,在JDK8U191版本之后,这个功能引入到了JDK 8,而JDK 8是广为使用的JDK版本。-XX:+UseContainerSupport允许JVM 从主机读取cgroup限制,例如可用的CPU和RAM,并进行相应的配置。这样当容器超过内存限制时,会抛出OOM异常,而不是杀死容器。
该特性在Java 8u191 +,10及更高版本上可用。注意,在191版本后,-XX:{Min|Max}RAMFraction 被弃用,引入了-XX:MaxRAMPercentage
,其值介于0.0到100.0之间,默认值为25.0。拉取最新的openjdk:8-jre-alpine作为底包,截止这篇博客,最新的版本是212,>191我们构建一个基础镜像,dockerfile如下:在应用的启动参数,设置 -XX:+UseContainerSupport,设置-XX:MaxRAMPercentage=75.0,这样为其他进程(debug、监控)留下足够的内存空间,又不会太浪费RAM。读到这里,这篇“容器环境的JVM内存如何设置”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。
本篇内容主要讲解“Python最常用的包有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快免费云主机域名捷,实用性强。下面就让小编来带大家学习“Python最常用的包有哪些”吧!numpy(数据处理和科学计算)代码示例:pandas(数据处理和分析)代…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。