user2290225
user2290225

Reputation:

What is effective Xmx value on my redhat machine running tomcat

I am running tomcat on RHEL 7 machine with 1GB RAM. I have setup tomcat and java both to have Xmx=1G and below statements support that,

[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"

and

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

But when I get exception, I get following message,

There is insufficient memory for the Java Runtime Environment to continue.

Native memory allocation (mmap) failed to map 244043776 bytes for committing reserved memory.

I know java can never claim 1GB memory as that is the total memory of the machine. but why I am getting error with this size mentioned?

Upvotes: 0

Views: 376

Answers (2)

Eugène Adell
Eugène Adell

Reputation: 3174

There is an interesting post here that suggests disabling OOPS. Are you running a physical server or a VM ?

I agree a 1G server is under-sized, you should run Xmx=512M and allow some swappiness (vm.swappiness = 60 is the default, which should be OK for a small Tomcat)

Upvotes: 0

Andreas
Andreas

Reputation: 159175

Try adding -Xms1g too, so it initially allocates all the memory, and you'll find that it cannot even start Tomcat.

If you want to squeeze as much memory into Tomcat as possible (not recommended), slowly reduce both numbers (same value for mx and ms) until Tomcat starts.

That is the absolute maximum you can give Tomcat, but you shouldn't do that. Java may still need more as it runs, and the OS will need more occasionally, so you should give Tomcat less than that absolute maximum.

Now that you've found the number, you can leave -Xms undefined again, if you want to.

Upvotes: 0

Related Questions