Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何永久增加java堆大小_Java_Jsp_Tomcat_Redhat_Heap Memory - Fatal编程技术网

如何永久增加java堆大小

如何永久增加java堆大小,java,jsp,tomcat,redhat,heap-memory,Java,Jsp,Tomcat,Redhat,Heap Memory,我试图增加生产服务器中的java堆内存。这是我正在尝试的两种方法 方式1 我已经通过以下命令设置了java内存 export _JAVA_OPTIONS="-Xmx10g" java -XshowSettings:vm java -XX:+PrintFlagsFinal -Xms5240m -Xmx10240m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=128m -version | grep -iE 'HeapSize|PermSize|Thre

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

方式1 我已经通过以下命令设置了java内存

export _JAVA_OPTIONS="-Xmx10g"
java -XshowSettings:vm 
java -XX:+PrintFlagsFinal -Xms5240m -Xmx10240m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=128m  -version | grep -iE 'HeapSize|PermSize|ThreadStackSize
 1. vi /etc/profile
 2. export  _JAVA_OPTIONS="-Xms5000m -Xmx12000m"
这样,java堆大小就不会永久增加

方式2 我尝试通过以下命令增加java堆大小

export _JAVA_OPTIONS="-Xmx10g"
java -XshowSettings:vm 
java -XX:+PrintFlagsFinal -Xms5240m -Xmx10240m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=128m  -version | grep -iE 'HeapSize|PermSize|ThreadStackSize
 1. vi /etc/profile
 2. export  _JAVA_OPTIONS="-Xms5000m -Xmx12000m"
这样,java堆大小就不会永久增加

结论 以上述方式,我无法成功地永久更改java堆大小。那么,如何永久更改java堆大小呢?请给我建议一条路。提前谢谢

更新: 在这里,我想用“永久”这个词来表达以下意思

意思是:如果我运行以下命令,那么我希望每次打开shell时都看到相同的堆大小

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

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

export _JAVA_OPTIONS="-Xmx10g"
java -XshowSettings:vm 
java -XX:+PrintFlagsFinal -Xms5240m -Xmx10240m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=128m  -version | grep -iE 'HeapSize|PermSize|ThreadStackSize
 1. vi /etc/profile
 2. export  _JAVA_OPTIONS="-Xms5000m -Xmx12000m"
要检查java堆内存大小,请运行以下命令:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
此命令在我的电脑中输出以下内容

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)
您会发现以下教程非常有用


只需在java runnable实例中调整所需的内存参数。每个java实例都有自己的jvm空间。

当您用tomcat标记问题时,我不同意您发布的答案。或者至少有了这个答案的适用性:当tomcat启动时,您需要设置某些选项。当您配置任何一个java进程开始使用这些选项时,您正在为自己设置灾难:

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

如果您启动jconsole是为了检查TomcatJMXbean,看看发生了什么,那么您将再次需要5G。对于任何其他在你的计算机上运行的、你甚至还不知道的小java工具。当您将设置设置为真正的全局设置时:任何用户启动的任何进程都可能会带来这些巨大的资源需求

现在,该怎么办

对于tomcat,在Linux环境中标记redhat,在tomcat的bin/setenv.sh中创建一个文件,并设置变量CATALINA_OPTS,例如

如果Tomcat是作为守护进程运行的,那么最好在其他地方使用此设置

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


另一个建议是:对于生产服务器,您希望将-Xms设置为与-Xmx相同的值。原因:如果在启动时无法获得最大内存,您需要立即解决这个问题,而不是在周日晚上凌晨3点,当JVM决定要占用更大的内存时。

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


什么是永久?请查看更新的问题。你读了吗?我真的不知道你发布的答案。你不能修改启动服务器的脚本。我强烈反对。虽然技术上是正确的,但这并不是您想要在系统上执行的操作:请参阅我的备选答案。在bin/setenv.sh中设置参数后,我是否可以通过./startup.sh启动tomcat服务器?或者我必须通过./catalina.sh启动tomcat服务器?是的,绝对可以。startup.sh最后调用catalina.sh,catalina.sh嵌入setenv.sh(如果存在)。因此,./startup.sh和。/catalina.sh都可以运行。在稳定的生产环境中,将-Xms和-Xmx设置为相同值的第二个有效原因是效率/性能;如果最终要扩展到-Xmx,那么最好立即获取该内存,而不是根据需要动态获取它。