缠丝猫 发表于 2024-5-18 01:09:49

docker Java 应用堆内存设置

弁言

本文主要是讲解 InitialRAMPercentage、MinRAMPercentage, MaxRAMPercentage 三个 JVM 参数之间的区别。参数由 Java 8 update 191 引入,主要是用于设置运行在物理机大概容器中的 Java 应用堆内存巨细。
InitialRAMPercentage

-XX:InitialRAMPercentage 用于设置堆的初始化巨细。假如物理机大概容器的内存巨细(limit 限制)为 1 GB, -XX:InitialRAMPercentage=25,那么堆内存巨细大概为 250 MB(1 GB 的 25%)。
当 -Xms 参数未指定时,-XX:InitialRAMPercentage 用于设置堆的初始化巨细。如果指定了 -Xms,-XX:InitialRAMPercentage 将会被 JVM 忽略。
MaxRAMPercentage、MinRAMPercentage
以上两个参数主要用于设置堆的最大内存巨细(JDK 的开发团队起的名字 -XX:MinRAMPercentage 很容易让人明白为是堆的最小内存巨细,然而并不是)。
如果你的物理机(或容器)内存小于 250 MB(大约),那么 -XX:MinRAMPercentage 参数用于设置应用堆的最大内存巨细。假如物理机内存巨细为 100MB,-XX:MinRAMPercentage=50,那么应用的最大堆内存巨细为 50 MB。
当你的物理机(或容器)的内存大于 250 MB(大约),-XX:MaxRAMPercentage 参数将用于设置应用堆的最大内存巨细。
我们举两个例子来验证以上结论:

[*]例 1:较小的宿主机内存
我们把容器的内存限制为 100 MB,MaxRAMPercentage 设置为 25, **MinRAMPercentage ** 设置为 50。那么由于宿主机的内存 100 MB 小于 250 MB,所以后者的设置应该见效,也就是如图所示,应用的最大堆巨细为 48.38 MB(100 MB 的 50%)。从该例子中看出 MaxRAMPercentage 被忽略。
docker run -m 100MB openjdk:10 java -XX:MaxRAMPercentage=25 -XX:MinRAMPercentage=50 -XshowSettings:vm -version
VM settings:
Max. Heap Size (Estimated): 48.38M
Using VM: OpenJDK 64-Bit Server VM


[*]例 2:较大的宿主机内存
我们把容器的内存限制改为 1 GB,MaxRAMPercentage 设置为 25, MinRAMPercentage 设置为 50。我们看到实际的应用堆最大巨细为 247.50 MB(由于宿主机内存大于 250 MB,所以前者设置见效)。
docker run -m 1GB openjdk:10 java -XX:MaxRAMPercentage=25 -XX:MinRAMPercentage=50 -XshowSettings:vm -version
VM settings:
Max. Heap Size (Estimated): 247.50M
Using VM: OpenJDK 64-Bit Server VM
当 -Xmx 未指定时,-XX:MaxRAMPercentage 及 -XX:MinRAMPercentage 用于设置堆的最大内存巨细。如果 -Xmx 指定了,那么以上两个参数将会被 JVM 忽略。如图:
docker run -m 1GB openjdk:10 java -XX:MaxRAMPercentage=25 -XX:MinRAMPercentage=25 -Xmx512m -XshowSettings:vm -version
VM settings:
Max. Heap Size: 512.00M
Using VM: OpenJDK 64-Bit Server VM
-Xmx512m、-XX:MaxRAMPercentage=25、-XX:MinRAMPercentage=25 同时指定了,但是只有 -Xmx512m 起到了作用。
结论


[*]用 -XX:InitialRAMPercentage 设置你的应用堆初始化内存巨细(前提是 -Xms 未设置)。
[*]-XX:MinRAMPercentage、-XX:MaxRAMPercentage 用于设置最大堆巨细(前提是 -Xmx 未设置)。
[*]-XX:MaxRAMPercentage 应用于大多场景,究竟主流的企业级 Java 应用内存已经超过了 250 MB。除非构建的是微型应用,物理机内存小于 250 MB,你才需要利用 -XX:MinRAMPercentage。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: docker Java 应用堆内存设置