我在具有 1GB 内存的 RHEL 7 机器上运行 tomcat。我已将 tomcat 和 java 都设置为 Xmx=1G 并且下面的语句支持它,
[root@ip-172-31-28-199 bin]# java -XX:+PrintFlagsFinal -version | grep HeapSize Picked up _JAVA_OPTIONS: -Xmx1g uintx ErgoHeapSizeLimit = 0 {product} uintx HeapSizePerGCThread = 87241520 {product} uintx InitialHeapSize := 16777216 {product} uintx LargePageHeapSizeThreshold = 134217728 {product} uintx MaxHeapSize := 1073741824 {product} openjdk version "1.8.0_161"
和
tomcat 2799 1 1 02:21 ? 00:00:07 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Xmx1024M -Dignore.endorsed.dirs= -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start
但是当我遇到异常时,我会收到以下消息,
There is insufficient memory for the Java Runtime Environment to continue.
Native memory allocation (mmap) failed to map 244043776 bytes for committing reserved memory.
我知道 java 永远不能要求 1GB 内存,因为那是机器的总内存。但是为什么我在提到这个尺寸时会出错?
最佳答案
也尝试添加-Xms1g
,这样一开始它就分配了所有内存,你会发现它甚至无法启动Tomcat。
如果你想将尽可能多的内存压入 Tomcat 中(不推荐),请慢慢减少这两个数字(mx
和 ms
的值相同code>) 直到 Tomcat 启动。
这是您可以为 Tomcat 提供的绝对最大值,但您不应该这样做。 Java 在运行时可能仍需要更多,而操作系统偶尔会需要更多,因此您应该为 Tomcat 提供少于绝对最大值的值。
现在您已经找到了数字,如果您愿意,可以再次将 -Xms
保留为未定义。
关于java - 我运行 tomcat 的 redhat 机器上的有效 Xmx 值是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49355039/