云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云服务器_眉山网站建设_新注册优惠

小七 141 0

服务器排名_企业级_大数据处理数据

当您在物理服务器上运行Java应用程序时,应该使用"-Xmx"JVM参数来指定Java堆大小。如果要将应用程序移植到容器中,您可能想知道如何在容器中配置Java堆大小?有什么最佳做法吗?在本文中,我们将讨论可用于指定Java堆大小的可能JVM参数和最佳选择。它们是:

1。-二十: 最大分数,-XX:最小分数

2。-二十: 最大坡度,-XX:最小坡度

3。-Xmx

让我们来讨论这些JVM参数,它们的优点和缺点。

1。-二十: MaxRAMFraction,-XX:MinRAMFraction

"-XX:MaxRAMFraction",'-XX:MinRAMFraction'JVM参数仅在Java 8 update 131到Java 8 update 190之间受支持。因此,如果您使用的是任何其他版本的JDK,则不能使用此选项。

假设您已将1GB内存分配给容器,那么如果您配置-XX:MaxRAMFraction=2,则将为Java堆大小分配约512GB(即1GB的1/2)。

如果您要使用"-XX:MaxRAMFraction"JVM参数,确保同时传递这两个额外的JVM参数"-XX:+UnlockExperimentalVMOptions-XX:+UseCGroupMemoryLimitForHeap"。只有传递这两个JVM参数,云呢拿,JVM才会从容器的内存大小派生堆大小值,否则,它将从底层主机的内存大小派生堆大小值。

这里您可以看到docker容器的内存设置为"1GB"(即-m 1GB)和"-XX:MaxRAMFraction=2。基于此设置,JVM将最大堆大小分配为494.9MB(约为1GB大小的一半)。

注意:使用'-XX:MaxRAMFraction'和'-XX:MinRAMFraction'来确定最大Java堆大小。JDK开发团队本可以给它起一个比'-XX:MinRAMFraction'更好的名字。这个名称让我们想到,'-XX:MinRAMFraction'参数用于配置最小堆大小。但这不是真的。要进一步了解它们之间的差异,请阅读本文。

这里是这种方法的缺点。

a.假设您要配置40%的docker内存大小,那么我们必须设置'-XX:MaxRAMFraction=2.5'。当您传递2.5作为值时,淘客选品,JVM将不会启动。这是因为'-XX:MaxRAMFraction'只能取整数值,不能取小数。参见下面JVM无法启动的示例。

b.在这个选项中,Java应用程序的堆大小将从容器的内存大小派生(因为它是分数基础)。假设您的应用程序需要1GB堆大小以获得最佳性能,并且如果容器配置为在内存大小小于1GB的情况下运行,则您的应用程序仍将运行,大数据与云计算,但性能特性较差。

c。此参数在现代Java版本中已被弃用。仅支持从Java 8 update 131到Java 8 update 190.

2。-二十: MaxRAMPercentage,-XX:MinRAMPercentage

"-XX:MaxRAMPercentage",'-XX:MinRAMPercentage'JVM参数受Java 8 update 191及更高版本的支持。因此,如果您运行的是较旧的JDK版本,则不能使用此JVM参数。

假设您已为容器分配了1GB内存,那么如果您配置-XX:MaxRAMPercentage=50,然后,大约512GB(即1GB的1/2)将分配给Java堆大小。

这里您可以看到docker容器的内存设置为'-m 1GB'和'-XX:MaxRAMPercentage=50'时的情况。基于此设置,JVM将最大堆大小分配为494.9MB(约为1GB的一半)。

注意:'-XX:MaxRAMPercentage'和'-XX:MinRAMPercentage'都用于确定最大Java堆大小。JDK开发团队可以给一个比'-XX:MinRAMPercentage'更好的名字。这个名称让我们想到,'-XX:MinRAMPercentage'参数用于配置最小堆大小。但这不是真的。要了解它们之间的差异,请阅读本文。

注意:在internet上的几篇文章中提到,在传递"-XX:MaxRAMPercentage","-XX:InitialRAMPercentage","-XX:MinRAMPercentage"时,需要传递"-XX:+UseContainerSupport"JVM参数。事实上,那不是真的。"-XX:+UseContainerSupport"是通过JVM中的默认参数传递的。因此,您不需要显式地配置它。

这里是这种方法的限制。

a.旧版本的Java不支持此参数。只有Java8更新191才支持它。

b.在这个选项中,Java应用程序的堆大小将由容器的内存大小派生(因为它是基于百分比的)。假设您的应用程序需要1GB堆大小以获得最佳性能,并且如果容器配置为在内存大小小于1GB的情况下运行,大数据什么意思,则您的应用程序仍将运行,云服务器服务好,但它的性能特性较差。

3。-Xmx

"-Xmx"在所有版本的Java中都受支持

使用"-Xmx"JVM参数可以指定细粒度的特定大小,如512MB、1024MB。

在这里可以看到在非容器中支持的-Xmx(传统物理服务器世界):

在容器世界中可以看到在Java 8 update 131版本中支持的-Xmx:

在这里可以看到在容器世界中可以看到Java10版本支持的-Xmx到:

a.如果您要分配的"-Xmx"大于容器的内存大小,那么您的应用程序将体验到java.lang.OutOfMemoryError错误:杀死进程或牺牲子进程