我在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内存,因为这是机器的总内存。但为什么我提到这个尺码的错误?
答案 0 :(得分:1)
尝试添加-Xms1g
,因此它最初会分配所有内存,你会发现它甚至无法启动Tomcat。
如果你想尽可能多地将内存压入Tomcat (不推荐),请慢慢减少两个数字(mx
和ms
的相同值),直到Tomcat启动
这是你可以给Tomcat的绝对最大值,但你不应该这样做。 Java在运行时可能仍然需要更多,并且OS偶尔会需要更多,所以你应该给Tomcat少于绝对最大值。
现在您已找到该号码,如果您愿意,可以再次定义-Xms
未定义。
答案 1 :(得分:0)
有一篇有趣的帖子here建议禁用OOPS。 您运行的是物理服务器还是VM?
我同意1G服务器的大小不足,你应该运行Xmx = 512M并允许一些swappiness(vm.swappiness = 60是默认值,对于小型Tomcat应该没问题)