如何永久增加Java堆大小

时间:2018-09-05 11:11:24

标签: java jsp tomcat redhat heap-memory

我正在尝试在生产服务器中增加Java堆内存。这是我正在尝试的两种方法。

方法1

I have tried the following answer from this link. 我已经通过以下命令设置了Java内存。

export _JAVA_OPTIONS="-Xmx10g"
java -XshowSettings:vm 

这样,java堆大小不会永久增加。

方法2

I have tried this answer. 我试图通过以下命令来增加Java堆大小。

java -XX:+PrintFlagsFinal -Xms5240m -Xmx10240m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=128m  -version | grep -iE 'HeapSize|PermSize|ThreadStackSize

通过这种方式,不会永久增加Java堆大小。

结论

以上述方式,无法永久更改Java堆大小。那么如何永久更改Java堆大小?请给我建议一种方法。提前致谢。

已更新:

在这里,我想用“永久”一词来表示以下含义。

含义:如果我运行以下命令,那么我希望每次打开外壳时都看到相同的堆大小。

java -XX:+PrintFlagsFinal -version | grep -iE'HeapSize|PermSize|ThreadStackSize'   

4 个答案:

答案 0 :(得分:1)

当您用“ tomcat”标记问题时,我不同意您发布的答案。或至少具有该答案的适用性:Tomcat启动时,您要设置某些选项。配置任何曾经开始具有这些选项的java进程时,您就将自己设置为灾难:

当您关闭tomcat时,它会启动一个非常短暂的Java进程,该进程将连接到正在运行的服务器,并发出信号通知其关闭,然后终止。对于此操作,您不需要任何特定的内存,但是,当您要关闭tomcat时没有5G的可用内存(-Xms5000m)时,这可能会失败。

如果启动jconsole以便检查tomcat JMX bean,然后查看发生了什么,则需要再次使用5G。对于将在您的计算机上运行的任何其他小型Java工具,您甚至都不知道。 (当您将设置真正设置为全局设置时:任何用户启动的任何过程可能会带来巨大的资源需求。

现在,该怎么办?

对于tomcat,在Linux环境中(标记为“ redhat”),在tomcat的bin/setenv.sh中创建一个文件,然后设置变量CATALINA_OPTS,例如

CATALINA_OPTS="$CATALINA_OPTS -Xms5000m -Xmx5000m"

如果Tomcat作为守护程序运行,最好在其他位置使用此设置。

为完整起见,即使您没有标记Windows:对于Windows,请执行bin / setenv.bat中的等效操作。这些文件不是tomcat发行版的一部分,例如它们不会在更新时被覆盖。但是,如果它们在那里,它们将被考虑在内。对于Windows服务,请使用服务配置进行适当的设置

另一个建议:对于生产服务器,您想要将-Xms设置为与-Xmx相同的值。原因:如果最大的内存在启动时不可用,那么您要立即弄清楚,而不是在周日凌晨3点,当JVM决定要拥有更大的内存时。

答案 1 :(得分:0)

只需在所需的Java可运行实例中调整内存参数。每个Java实例都有其自身的jvm空间。

答案 2 :(得分:0)

在Rhel7或CentOS7上,您应该更改/usr/lib/systemd/system/tomcat.service

Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

答案 3 :(得分:-1)

经过4小时的查询,我找到了以下解决方案。要修改系统范围的配置文件,请转至/ etc / profile。或者,您可以运行以下命令。

 1. vi /etc/profile
 2. export  _JAVA_OPTIONS="-Xms5000m -Xmx12000m"

要检查Java堆内存大小,请运行以下命令:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

此命令在我的pc中输出以下内容。

Picked up _JAVA_OPTIONS: -Xms5000m -Xmx12000m
     intx CompilerThreadStackSize                   = 0                                   {pd product}
    uintx ErgoHeapSizeLimit                         = 0                                   {product}
    uintx HeapSizePerGCThread                       = 87241520                            {product}
    uintx InitialHeapSize                          := 5242880000                          {product}
    uintx LargePageHeapSizeThreshold                = 134217728                           {product}
    uintx MaxHeapSize                              := 12582912000                         {product}
     intx ThreadStackSize                           = 1024                                {pd product}
     intx VMThreadStackSize                         = 1024                                {pd product}
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

您会发现以下教程非常有用。

https://www.mkyong.com/java/find-out-your-java-heap-memory-size/