如何永久增加java堆大小
我试图增加生产服务器中的java堆内存。这是我正在尝试的两种方法 方式1 我已经通过以下命令设置了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
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,那么最好立即获取该内存,而不是根据需要动态获取它。