我运行tomcat的redhat机器上有效的Xmx值是什么

时间:2018-03-19 02:36:15

标签: java tomcat memory heap redhat

我在RHEL 7机器上运行tomcat,内存为1GB。我已经设置了tomcat和java都有Xmx = 1G而且下面的语句都支持它,

  

[root @ ip-172-31-28-199 bin]#java -XX:+ PrintFlagsFinal -version | grep的   HeapSize拿起_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

但是当我得到异常时,我会收到以下消息,

  

Java Runtime Environment没有足够的内存继续。

     

本机内存分配(mmap)无法映射244043776字节以提交保留内存。

我知道java永远不会声称1GB内存,因为这是机器的总内存。但为什么我提到这个尺码的错误?

2 个答案:

答案 0 :(得分:1)

尝试添加-Xms1g,因此它最初会分配所有内存,你会发现它甚至无法启动Tomcat。

如果你想尽可能多地将内存压入Tomcat (不推荐),请慢慢减少两个数字(mxms的相同值),直到Tomcat启动

这是你可以给Tomcat的绝对最大值,但你不应该这样做。 Java在运行时可能仍然需要更多,并且OS偶尔会需要更多,所以你应该给Tomcat少于绝对最大值。

现在您已找到该号码,如果您愿意,可以再次定义-Xms未定义。

答案 1 :(得分:0)

有一篇有趣的帖子here建议禁用OOPS。 您运行的是物理服务器还是VM?

我同意1G服务器的大小不足,你应该运行Xmx = 512M并允许一些swappiness(vm.swappiness = 60是默认值,对于小型Tomcat应该没问题)