我正在尝试在生产服务器中增加Java堆内存。这是我正在尝试的两种方法。
I have tried the following answer from this link. 我已经通过以下命令设置了Java内存。
export _JAVA_OPTIONS="-Xmx10g"
java -XshowSettings:vm
这样,java堆大小不会永久增加。
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'
答案 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/