What is the correct way to set Java memory parameters in docker-compose.yml

Been having some performance issues and a lot of java.lang.OutOfMemoryError: GC overhead limit exceeded errors.

I have tried
-JAVA_OPTIONS=-Xmx2048m -Xms512m
and

  • JVM_OPTS=-Xms800m -Xmx1600m
    and
  • CATALINA_OPTS=-Xms1024m -Xmx2048m

in the “environment:” section of “web:” service using image xwiki:10.11-postgres-tomcat ( https://hub.docker.com/_/xwiki/ )

When I look in the docker logs, I see this:
03-Jan-2019 17:54:39.547 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx1024m

How do I pass a higher setting?

We have 25 active users.

Good question. I don’t know, would need to try it.

All I know is that by default, we copy this file: https://github.com/xwiki-contrib/docker-xwiki/blob/master/template/tomcat/setenv.sh at https://github.com/xwiki-contrib/docker-xwiki/blob/master/template/Dockerfile#L66

Exception in thread “http-nio-8080-Acceptor-0” java.lang.OutOfMemoryError: Java heap space

Every time that happens I have to restart the docker container :frowning:

FWIW I’ve followed the documentation (see https://github.com/xwiki-contrib/docker-xwiki#passing-jvm-options) and tried it with docker run --net=xwiki-nw --name xwiki -p 8080:8080 -v /tmp/xwiki:/usr/local/xwiki -e DB_USER=xwiki -e DB_PASSWORD=xwiki -e DB_DATABASE=xwiki -e DB_HOST=mysql-xwiki -e JAVA_OPTS="-Xmx2048m" xwiki:mysql-tomcat.

When Tomcat starts I get:

04-Jan-2019 07:27:08.529 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.37
04-Jan-2019 07:27:08.535 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Dec 12 2018 12:07:02 UTC
04-Jan-2019 07:27:08.536 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.37.0
04-Jan-2019 07:27:08.537 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
04-Jan-2019 07:27:08.537 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            4.9.125-linuxkit
04-Jan-2019 07:27:08.537 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
04-Jan-2019 07:27:08.538 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/lib/jvm/java-8-openjdk-amd64/jre
04-Jan-2019 07:27:08.538 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_181-8u181-b13-2~deb9u1-b13
04-Jan-2019 07:27:08.539 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
04-Jan-2019 07:27:08.539 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
04-Jan-2019 07:27:08.540 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
04-Jan-2019 07:27:08.540 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
04-Jan-2019 07:27:08.541 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
04-Jan-2019 07:27:08.542 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx2048m
04-Jan-2019 07:27:08.542 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
04-Jan-2019 07:27:08.547 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
04-Jan-2019 07:27:08.547 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
04-Jan-2019 07:27:08.548 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx1024m
04-Jan-2019 07:27:08.548 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
04-Jan-2019 07:27:08.549 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true
04-Jan-2019 07:27:08.549 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dsecurerandom.source=file:/dev/urandom
04-Jan-2019 07:27:08.550 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
04-Jan-2019 07:27:08.550 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
04-Jan-2019 07:27:08.551 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
04-Jan-2019 07:27:08.551 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp

Notice the 2 lines:

04-Jan-2019 07:27:08.542 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx2048m
...
04-Jan-2019 07:27:08.548 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx1024m

Then I created a page with the content from https://snippets.xwiki.org/xwiki/bin/view/Extension/Available%20Memory and got:

Current size of heap in bytes: 650641408
Maximum size of heap in bytes. 954728448
Amount of free memory within the heap in bytes: 101382832

So I can confirm that the value used is 1024m(i.e. the last one).

Thus this solution doesn’t work to override any value defined in setenv.sh.

Please raise an issue on https://jira.xwiki.org/projects/XDOCKER/summary and I’ll have a look.

Thanks

Ok I’ve done it: https://jira.xwiki.org/browse/XDOCKER-92

And it’s now implemented. See comments in the jira issue.